使用git高效管理項目

 

簡單在一個目錄下拉取別人的一個工程

 

1.在任何一個目錄下新建一個文件夾

比如:work,然後cd 切換到工作目錄

 

2.倉庫初始化

git init

 

3.從某個地址拉取工程到自己的工作目錄

git clone [email protected]:2dxproj/AdventureEliminate.git

 

備註:比較大的工程往往用http協議下載不下來,這個時候可以用ssh協議,添加公鑰,然後就可以拉取到指定目錄下。我開始用http協議拉取了6次,一直出錯,因此這個很重要!

 

4.git學習資料

官方文檔

https://github.com/progit/progit/tree/master/zh/  

 

廖雪峯git學習

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

 

git最佳實踐

http://www.ruanyifeng.com/blog/2012/07/git.html

 

git官網權威解釋
http://git-scm.com/book/zh/v1

 

忽略文件等解釋
https://juejin.im/post/58c7a4cf61ff4b005da83c42

 

祕鑰生成等

https://juejin.im/entry/5809dbc42f301e005c2f27d9

 

自己創建項目,並且推送到git上

1.第一次新建項目

在git上先新建項目

2.cd到想要工作的目錄下

然後git clone下來新建的項目

3.將用ide比如:pycharm新建python項目,然後將新的項目添加到新建的項目中

提交更改,推送

4.推送

git config --global push.default matching

git push

Username for 'https://git.oschina.net': jianan
Password for 'https://[email protected]':數字+拼音

這樣纔可以推送上去

 

mac終端配置

http://git.oschina.net

iterm2
https://iterm2.com



oh my zsh
http://ohmyz.sh


Homebrew
http://brew.sh/index_zh-cn.html


拉取
➜  work git:(master) ✗ git submodule update --init
➜  work git:(master) ✗ cd naval
➜  naval git:(master) ✗ git submodule update --init
Submodule 'frameworks/cocos2d-x' ([email protected]:young40/cocos2d-x.git) registered for path 'frameworks/cocos2d-x'
Cloning into 'frameworks/cocos2d-x'...
remote: Counting objects: 11975, done.
remote: Compressing objects: 100% (7566/7566), done.

命令行下面的快捷鍵
tab按鍵是補全作用
gst 查看狀態
l 查看文件目錄
fetch 分支相關













 

工程運行

拉取保證得到最新的資源

cd ~/Documents/work/naval_design

git pull 拉取

 

當遇到衝突時,這樣可以修改衝突

git difftool src/model/LocalData.lua

當git diff直接這樣子寫不加參數的話,會直接顯示出來該更前後對比,因此首先執行它比較好。

git diff . 這樣可以直接查看文件前後的改動,非常實用

配合gst來查看狀態

git checkout src/model/LocalData.lua 這樣回退狀態

 

s 發佈 

alias s="$COCOSTUDIO publish -s -f ~/Documents/naval_work/naval_res/proj/ui/ui.ccs -o ~/Documents/naval_work/naval/res"

可見s是當在cocostudio中修改了資源時,需要發佈到naval/res下的ui中,可見它只是只發布csb。如圖所示:

 

e 加密拷貝(花費大概1分鐘,時間較長,比如當增加圖片時使用,因爲要拷貝到資源中)

alias e="cd $NAVAL_JAVA_DIR && java -jar exportExcel.jar && date && cpskip && cd -"

    public static void main( String[] args )
    {
    	copyRes( );
    	generateExcel( );
    	generateErrorNo();
    	generateText( );
	generateModelAndCommand( );
	generateResMetadata( );
<span style="white-space:pre">	</span>encrpytOutputRes( );
    }
public static void copyRes(){
    System.out.println( "開始複製res...." );
    File srcFile = new File(  "../../../../naval_res/res" );
    File destFile = new File( "../../../res" );
    FileUtils.copyDirWithout( srcFile, destFile, "." );
    System.out.println( "複製res結束...." );        
}

將naval_res/res下資源

拷貝到: naval/res下

可見e命令是將除了ui之外的資源拷貝到naval_res下。

其餘的代碼是拷貝excel,command協議等等內容了。

git push推送

naval_design也要保持爲最新的

每次換ip,刪除文稿下的game.bin文件,然後重新運行即可。

在xcode中運行mac端naval_desktop 把c++代碼編譯好

運行lua端進行打包

搜索 the_silver_searcher安裝

brew install the_silver_searcher

cd /Users/jianan/Documents/work/naval_res

ag -i 搜索內容
 

修改UI

首先退出cocostudio

naval_res git:(master) gst

On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

modified:   proj/ui/ui.ccs
no changes added to commit (use "git add" and/or "git commit -a")
➜  naval_res git:(master) ✗ git checkout proj/ui/ui.ccs
➜  naval_res git:(master) gst
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
➜  naval_res git:(master) git pull
Already up-to-date.
➜  naval_res git:(master) gst
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean

















➜  naval_res git:(master)

修改lua及其資源文件並提交

git  add 需要提交的文件

gst

git commit -m "修改:..."    (這個只是提交到本地庫,必須進行下面的git push)

git pull

:q (這個提交的過程中偶爾用到)

git push (必須這樣纔會提交到服務器)

 

命名規則

 btn_ => Button
 lbl_ => BitmapFontLabel
 lbl_ => Text
 img_ => Image
 spr_ => Sprite
 node_ => Node
 pnl_ => Panel
 var_ => 其他類型
 
 chk_ => CheckBox
 pag_ => PageView
 lod_ => LoadingBar
 sld_ => Slider
 inp_ => TextField
 par_ => Particle
 til_ => Map
 adi_ => Audio
 scr_ => ScrollView
















去公司首先做的事情

1.cd /Users/jianan/Documents/work/naval  

    git pull

2.cd /Users/jianan/Documents/work/naval_design

    git pull

3.cd /Users/jianan/Documents/work/naval_res

git pull

4.發佈資源

s && e

說明:e命令下,如果jar包不能執行,那麼:

cd /Users/jianan/Documents/work/naval/frameworks/tool/warship

java -jar /Users/jianan/Documents/work/naval/frameworks/tool/warship/exportExcel.jar
 

submodule 託管項目

1.在任何一個目錄下新建一個文件夾

比如:work,然後cd 切換到工作目錄。(切換到的目錄,以後再進行操作的話,就會在當前目錄生效)

2.倉庫初始化

git init

3.submodule初始化

git submodule init

4.將http地址上的庫添加到submodule上

git submodule add (http地址)

excel命令

1.打開指定路徑excel   open excel/.DictMeta.xlsx

回退所有狀態

git checkout .

當後面有參數時,如果是目錄,則切換到此目錄,如果是lua文件,則回退lua文件。
 

查看日誌

git log --author="jianan"  查看具體人提交的日誌

git log 查看所有人提交日誌

git log -p XXX(hash值)  查看具體hash提交的東西

查看隱藏文件

cd /Users/jianan/Documents/naval_work/naval_design/excel

ls -a即可查看隱藏文件

open .DictMeta.xlsx
 

git 提交規則

1.不是我改的,不能提交。git status後,一定先checkout,再拉取。只提交自己修改的!!!

2.打包資源前,一定要保證資源是整潔的!發現修改了就恢復掉。

adb用法小結

➜  ~ /Users/jianan/Documents/Android/sdk/platform-tools
➜  platform-tools ./adb logcat | grep cocos  

platform-tools ./adb install /Users/jianan/Desktop/naval-release-signed\ 

git merge

1.分支合併(只合代碼庫和加密庫.例如:合併V1.2.3Oversea到master上)

cd naval(V1.2.3Oversea)
git pull

cd naval(master)
git merge V1.2.3Oversea
解決衝突

cd naval_encrypt(V1.2.3Oversea)
git pull
cd naval_encrypt(master)
git merge V1.2.3Oversea
解決衝突












合併技巧:當你確定要用V1.2.3Oversea上的東西,比如資源時,可直接將其覆蓋到master上,然後提交更改即可。

 

2.cherry-pick命令合併部分修改(例如:將V1.2.3Oversea上某個提交合併到master上)

cd naval(V1.2.3Oversea)
git pull
查看提交的commit hash值,例如是XXX


cd naval(master)
git cherry-pick XXX
解決衝突








 

3.刪除分支(先刪除本地分支,再刪除遠程分支  例如:刪除V1.4.5分支,刪除分支前必須先在其它分支)

gsfr git branch -D V1.4.5

gsfr git push origin :V1.4.5

 

4.回退到某個提交(可以達到撤銷merge等)

git checkout hash

git checkout V1.4.7恢復

查看一個具體的提交的commit hash值(已經提交git的也撤銷遠程的) 例如XXX

 

正確(注意後面那個origin dev 需要指定下遠程分支):

git reset --hard 0cde337c48fe626cd25d4e2c0ff5f67786f2d978 && git push -f origin dev

錯誤:

------git reset --hard <commit_id> && git push origin HEAD --force-----

經過驗證:用這個錯誤的,看着是回退了,但是執行git pull又拉取下來了。尷尬!!!

 

撤銷merge還可以用: git merge --abort

(我發現別人還git checkout 到commit hash值,然後又這樣打入分支名稱來恢復)

5.撤銷commit(git add .後撤銷某個commit)

git reset .

6.在本地創建並且同步服務器上別人剛創建的分支(比如:我在自己mac上創建V1.4.5,同時在imac上拉,發現是拉不到V1.4.5的,但是能直接切換; 或者別人創建了V1.4.7分支,我在我電腦上想切換到這個分支)

*1如果是別人創建並提交的分支,在自己機器上創建並且同步下來。(git pull = git fetch + git merge)

gsfr git fetch

gsfr git checkout -b oversea_V1.1.1 orign/oversea_V1.1.1      這個可以讓本地看到V1.4.5分支

這樣更靠譜,直接指定遠程分支和本地分支名字:

git fetch origin feature-usercenter:feature-usercenter

 

git fetch細節:

遠程:origin/master

本地:origin/master   master

當你git fetch的話,是把本地的origin/master更新到最新,但是你看到的是本地master,並沒有合併。因此git fetch比git pull安全,git pull比git fetch多了一步,直接給你合併了。

 

*2如果想用submodule遞歸在naval下創建分支,並且直接推送到遠程分支上,可以這樣一起創建:

git checkout -b dev && git push origin dev && git branch --set-upstream-to=origin/dev dev

刪除分支:

git branch -D test && git push origin :test

 

單一的創建分支的話,比如在naval下:

git checkout -b oversea_V1.1.1

git push origin oversea_V1.1.1

這樣創建時,注意如果naval有子工程,那麼這樣是創建不了的。這時候你在naval上,用加gsfr遞歸創建即可

//設置新的url
git remote set-url origin [email protected]:hero/RTSPowerCI.git

git push --all



//查看遠程git地址
git remote show origin

git stash


git stash   //隱藏修改     這樣可以起一個名字   git stash save "aaa" 
git stash list  //查看修改列表
git stash pop //恢復修改(也就是可以查看到更改)


撤銷掉所有更改

git stash -u && git stash clear

切換分支注意事項

 

ui.ccs的改動  當切換分支時,注意將cocostudio關閉掉,不然如果切換到的分支有這個模塊,而切換前的沒這個模塊,ui.ccs就會有更改,這樣可能導致刪除。ui.ccs有更改的話,一定要查看下。佔用內存的不會被切換(佔用的東西,是不會被切換的)。 

 

查看分支

查看遠程分支:以列表形式顯示

git branch -va
 

查看本地分支

git branch

添加navalVersion庫

1.查看一個git託管的文件的地址
  git remote -v

2.得到git倉庫地址: 
  [email protected]:naval_cp/naval.git

3.open  ~/.ssh

4.拷貝進去文件

5.設置下權限爲600
sudo chmod 600 kongzhong_git

6.git clone [email protected]:naval_cp/naval.git












強制添加-f選項

假如在.gitignore文件中被忽略了, 比如忽略Icon* ,這樣就會忽略所有以icon開頭的圖片,git默認不區分大小寫的。那麼查看git狀態是查看不到更改的,爲了能添加到git中幫你託管,那麼git add -f  文件路徑,這樣就會強制添加進來,幫你託管。

 

刪除文件

 

*

用 git rm 來刪除文件,同時還會將這個刪除操作記錄下來;
用 rm 來刪除文件,僅僅是刪除了物理文件,沒有將其從 git 的記錄中剔除。

*

當我們需要刪除暫存區分支上的文件, 同時工作區也不需要這個文件了, 可以使用 

git rm file_path

*

當我們需要刪除暫存區分支上的文件, 但本地又需要使用, 只是不希望這個文件被版本控制, 可以使用

git rm --cached file_path

file_path 爲文件路徑

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章