假如你剛加入一個(gè)項(xiàng)目組一姿,該項(xiàng)目使用Git作為源代碼管理拖云,但你之前沒(méi)有用過(guò)Git那伐,你該怎么辦踏施?
剛開始你完全沒(méi)必要去系統(tǒng)學(xué)習(xí)Git石蔗,只要了解幾條命令就足以勝任:首先用git clone下載代碼,每當(dāng)你修改一個(gè)文件或者新添加了一個(gè)文件你用git add暫存修改畅形,修改好之后用git commit提交代碼變更記錄养距,最后用git push提交到服務(wù)器上。如果你隨時(shí)想查看提交記錄用git log日熬。我們來(lái)看看具體該怎么做:
注意棍厌,如果沒(méi)有其他特殊說(shuō)明,本教程的所有操作都是在系統(tǒng)shell中運(yùn)行碍遍,不包含任何圖形化工具的操作定铜。
安裝Git Git官方網(wǎng)站上有相應(yīng)平臺(tái)版本下載(Mac上一般默認(rèn)有Git阳液,如果你用Mac先敲下git命令怕敬,確認(rèn)下有沒(méi)有)。在不想安裝的情況下帘皿,你也可以去這里在線練習(xí)东跪,該網(wǎng)頁(yè)提供模擬的Git命令供你一步步練習(xí)使用。
全局設(shè)置
git config --global user.name "John Doe" // John Doe換成你自己名字`
git config --global user.email johndoe@example.com // johndoe@example.com 換成你的郵件地址
用戶名和郵件是用來(lái)追蹤代碼提交者的鹰溜,每次你提交代碼虽填,歷史記錄里面會(huì)有這個(gè)信息。
-
獲取遠(yuǎn)程代碼倉(cāng)庫(kù)地址如果你還沒(méi)有Git服務(wù)器的地址曹动,請(qǐng)找你同事求助斋日,問(wèn)一問(wèn)“我們Git服務(wù)器地址是什么?”墓陈,一般情況下你會(huì)得到這樣一個(gè)地址:
username@host:/path/to/repository
其中username是你的用戶名恶守,host當(dāng)然就是git的服務(wù)器地址」北兀可能是IP或者域名
一個(gè)真實(shí)的例子可能像這樣:
jeffrey@192.168.1.100:project.git~
或者這樣的
user@server:/projects/project.git也可能是這樣的
https://server/namespace/project.git
如果你同事只告訴你一個(gè)服務(wù)器和路徑兔港,你也不知道用戶名密碼,你還得再找其他人幫你增加新用戶仔拟。為了方便描述衫樊,之后用_ https://server/namespace/project.git_來(lái)指代這個(gè)你得到的地址。 下載項(xiàng)目源代碼[^ 1]
git clone https://server/namespace/project.git
下載之前最好先切換到你想放源代碼的文件夾利花,通過(guò)執(zhí)行上面這個(gè)命令下載項(xiàng)目代碼到該文件夾中科侈。
[^ 1]:“下載”確切的說(shuō)是創(chuàng)建一個(gè)遠(yuǎn)程代碼倉(cāng)庫(kù)的一個(gè)本地克隆,如果你有疑問(wèn)炒事,暫時(shí)就理解成“下載源代碼”即可臀栈,本系列后面文章會(huì)有詳細(xì)解釋。修改了一個(gè)代碼文件之后使用git add命令
git add the-modified-file.cc
添加新代碼文件到項(xiàng)目中同樣也使用git add命令
git add the-added-file.cc
提交本地倉(cāng)庫(kù)更改
git commit -m "fix a xxx bug
提交到遠(yuǎn)程服務(wù)器
git push origin master
該提交命令的格式是~git push [remote-name] [branch-name]~. origin指的是遠(yuǎn)程服務(wù)器分支羡洛,master為本地分支挂脑。二者的值都是在你一開始用clone命令的時(shí)候被git自動(dòng)設(shè)置好了的了藕漱。所以只要簡(jiǎn)單的使用origin master即可。
需要注意的幾點(diǎn)有:
多次更改需多次git add崭闲。上述#5中肋联,如果你在你執(zhí)行了add之后有又有新的更改想提交,請(qǐng)?jiān)俅螆?zhí)行add命令刁俭,如此反復(fù)橄仍。否則此時(shí)通過(guò)commit命令被提交的只是上次add之前的更改,add之后的新改動(dòng)不會(huì)被提交牍戚。下一篇文章會(huì)詳細(xì)描述為什么需要這么做侮繁,和這個(gè)機(jī)制有什么優(yōu)點(diǎn);
git push才會(huì)提交代碼到服務(wù)器如孝,其他操作都是在本地進(jìn)行宪哩。上述#7中_git commit _命令只是把代碼提交到本地倉(cāng)庫(kù),此時(shí)其他人還看不到你的更改第晰。只有通過(guò)#8的push操作后代碼才會(huì)真正被提交到遠(yuǎn)程服務(wù)锁孟,此時(shí)其他人才會(huì)看到你的更改次绘;現(xiàn)在你應(yīng)該還不會(huì)如何撤銷更改切距,所以請(qǐng)謹(jǐn)慎使用push操作感耙;
修改和提交代碼到服務(wù)器前最好先同步最新代碼悔政。因?yàn)槟悻F(xiàn)在還不熟悉其他操作艇拍,為了避免merge器腋,最好能在別人沒(méi)有改動(dòng)的情況下修改代碼赤兴,或者運(yùn)行下git fetch origin先同步別人的更改后再修改文件队伟。
放心練習(xí)腔稀,只要不做git push操作盆昙,都是安全的。這里之所以沒(méi)有推薦在本地新建一個(gè)代碼倉(cāng)庫(kù)作為練習(xí)是因?yàn)槟阃耆梢杂媚愕恼鎸?shí)項(xiàng)目隨便練習(xí)操作烧颖,只要不git push就行弱左。真實(shí)的項(xiàng)目你可以看到別人是怎么用Git的,也不用人為花時(shí)間造練習(xí)數(shù)據(jù)炕淮。玩壞了直接在文件系統(tǒng)刪掉整個(gè)目錄拆火,或者在其他目錄重新git clone一份項(xiàng)目代碼即可。即使公司暫時(shí)沒(méi)有可以使用的源代碼倉(cāng)庫(kù)你還可以去[github]上隨便找一個(gè)感興趣的小項(xiàng)目clone下了練習(xí)即可涂圆。如果你還是要堅(jiān)持新建本地代碼倉(cāng)庫(kù)練習(xí)隨筆找個(gè)目錄執(zhí)行git init即可们镜,執(zhí)行git init之后該目錄下除了沒(méi)有項(xiàng)目文件以外和其他git倉(cāng)庫(kù)沒(méi)有區(qū)別。
那如何知道自己和別人的提交記錄呢润歉?使用git log即可模狭。輸出結(jié)果會(huì)像這樣:
$ git log
commit ca82a6dff817ec66f44342007202690a93763949`
Author: Scott Chacon <schacon@gee-mail.com>`
Date: Mon Mar 17 21:52:11 2008 -0700`
changed the version number`
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7`
Author: Scott Chacon <schacon@gee-mail.com>`
Date: Sat Mar 15 16:40:33 2008 -0700`
removed unnecessary test`
commit a11bef06a3f659402fe7563abf99ad00de2209e6`
Author: Scott Chacon <schacon@gee-mail.com>`
Date: Sat Mar 15 10:31:28 2008 -0700`
first commit
或者你想看看每次提交具體的改動(dòng)內(nèi)容,請(qǐng)加上-p選項(xiàng)
git log -p
下面顯示的結(jié)果包涵了具體改動(dòng)內(nèi)容歷史記錄
$ git log -p -2 // -2表示只想看最近兩次提交歷史
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
diff --git a/Rakefile b/Rakefile
index a874b73..8f94139 100644
--- a/Rakefile
+++ b/Rakefile
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
spec = Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
s.name = "simplegit"
- s.version = "0.1.0"
+ s.version = "0.1.1"
s.author = "Scott Chacon"
s.email = "schacon@gee-mail.com"
s.summary = "A simple gem for using Git in Ruby code."
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test
diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index a0a60ae..47c6340 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -18,8 +18,3 @@ class SimpleGit
end
end
-
-if $0 == __FILE__
- git = SimpleGit.new
- puts git.show
-end
\ No newline at end of file