2013-05-18 148 views
-3

我喜歡在我的本地計算機上練習Git,這樣做的最佳方式是什麼。 我想創建兩個Windows用戶帳戶,兩個存儲庫(每個用戶一個), 和模仿遠程存儲庫 - 所有在我的本地計算機。學習Git最佳實踐

我沒有本地網絡,但我確實可以訪問互聯網。 我特別感興趣的是解決拉衝突,在 多分支機構等工作。

請分享您的想法和經驗,以學習Git的最佳途徑。

+0

使用bitbucket作爲遠程存儲庫,它是免費的。然後你可以在你的機器上安裝兩份... – sashkello

+2

最好的學習方式有時只是rtfm,但肯定不會在論壇上提出這樣的問題。 –

+0

git不能練習 – prusswan

回答

1

我有這個在我的.bash_aliases文件:

alias gitlearn='cd; rm -rf gitlearn; mkdir gitlearn; cd gitlearn; git init; git commit --allow-empty -m"Add empty, initial commit"' 

任何時候,我想探索或git的實踐中,我只需鍵入gitlearn,我在~/gitlearn/用新鮮的回購,以及第一空提交,這使得重新綁定你的第一個實際提交成爲可能,因爲你需要在重新綁定時第一次提交之前指定提交。

然後我只是使用一堆linux命令來快速做出我需要的任何設置。我測試了分支和合並策略,在一個新的常見的第三個回購測試分支概念中交錯完全獨立,無關的回購的提交(尊重日期),探索git log --graph輸出與真正瘋狂的合併會發生什麼,讓我自己熟悉用臨時克隆上的命令(比如可怕的filter-branch),甚至找出實際需要的東西(你可以自己手工創建)來擁有一個有效的git倉庫。

開始了一個空目錄:

~/gitlearn$ ls .git 
ls: cannot access .git: No such file or directory 
~/gitlearn$ git st 
fatal: Not a git repository (or any parent up to mount point /home/gfixler) 
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set). 

這是所有你需要做一個混帳回購協議:

~/gitlearn$ mkdir -p .git/objects .git/refs 
~/gitlearn$ echo 'ref: refs/heads/master' >.git/HEAD 
~/gitlearn$ git st 
# On branch master 
# 
# Initial commit 
# 
~/gitlearn$ tree .git 
.git 
|-- HEAD 
|-- objects 
`-- refs 

2 directories, 1 file 

我會做這樣的事情:

~/gitlearn$ echo something >afile 
~/gitlearn$ git add afile 
~/gitlearn$ git st 
# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
# new file: afile 
# 
~/gitlearn$ git commit -m'Add something to afile' 
[master 3f78112] Add something to afile 
1 file changed, 1 insertion(+) 
create mode 100644 afile 
~/gitlearn$ echo another thing >>afile 
~/gitlearn$ git diff 
diff --git a/afile b/afile 
index deba01f..fa8eba8 100644 
--- a/afile 
+++ b/afile 
@@ -1 +1,2 @@ 
something 
+another thing 
~/gitlearn$ git add --update . 
~/gitlearn$ git commit -m'Add another thing to afile' 
[master 5c639d9] Add another thing to afile 
1 file changed, 1 insertion(+) 
~/gitlearn$ git checkout -b feature 
Switched to a new branch 'feature' 
~/gitlearn$ echo >>afile 
~/gitlearn$ echo feature 1 >>afile 
~/gitlearn$ git diff 
diff --git a/afile b/afile 
index fa8eba8..be87597 100644 
--- a/afile 
+++ b/afile 
@@ -1,2 +1,4 @@ 
something 
another thing 
+ 
+feature 1 
~/gitlearn$ git add --update . 
~/gitlearn$ git ci -m'Add feature 1 to afile' 
[feature 25b20ab] Add feature 1 to afile 
1 file changed, 2 insertions(+) 
~/gitlearn$ git log --all --graph --decorate --oneline 
* 25b20ab (HEAD, feature) Add feature 1 to afile 
* 5c639d9 (master) Add another thing to afile 
* 3f78112 Add something to afile 
* 70e28a0 Add empty, initial commit 
~/gitlearn$ 

等...直到我理解一個概念。這是一種快速實驗的方式。我也使用了許多別名,這些別名的速度更快,例如,我只需鍵入git add --u<TAB> .,因此大多數命令的鍵盤鍵數往往少於15。

我已經向幾個人推薦了這個。這是一個非常好的方式,可以讓我快速適應基本知識,最近更深入地瞭解git的內部特性。

至於遙控器,我在本地模擬所有的時間。mkdir remote.git; cd remote.git; git init --bare; cd ..; git clone remote.git local; cd local,現在你處於一個「本地」回購,它將「remote.git」中的那個視爲其起源。這與典型的設置沒有什麼不同,除了裸露的'remote.git'實際上在您的本地光盤上。從'local'內,你可以從'remote.git'中進行推送,獲取和拉出,並且它在功能上與你在本地和遠程回購之間做的相同。

+0

Gary,你已經給出了非常有用的命令,特別是在同一臺機器上有遠程和本地的命令。你能解釋一下,如果可能的話,將兩個不同用戶的變化推送到遠程(本地設置什麼),那麼我們該怎麼做?我們是否需要在各自的.git/config文件中配置這些用戶? –

+0

是的。例如:'mkdir central; cd中央; git init; git commit --allow-empty -m'Add initial,empty commit'; cd ..; git clone --bare central; rm -rf central; git clone central.git user1; git clone central.git user2; cd user1; git config --local user.name user1; git config --local user.email user1 @ company; cd ../user2; git config --local user.name user2; git config --local user.email user2 @ company; cd ..',那麼你可以作爲單獨的用戶在'user1 /'和'user2 /'中工作,每個用戶都可以推送到他們的兄弟'central.git'回購。那些'git config --local'行爲你編輯每個'.git/config'。 –

4

你的文件系統(假設你叫origin)可以創建一個第一儲存庫和內部運行:

git init --bare 

然後,你可以做第一個克隆有:

git clone origin clone1 

而且一第二個:

git clone origin clone2 

然後,您可以提交,推入並拉入每個克隆進行訓練。