我喜歡在我的本地計算機上練習Git,這樣做的最佳方式是什麼。 我想創建兩個Windows用戶帳戶,兩個存儲庫(每個用戶一個), 和模仿遠程存儲庫 - 所有在我的本地計算機。學習Git最佳實踐
我沒有本地網絡,但我確實可以訪問互聯網。 我特別感興趣的是解決拉衝突,在 多分支機構等工作。
請分享您的想法和經驗,以學習Git的最佳途徑。
我喜歡在我的本地計算機上練習Git,這樣做的最佳方式是什麼。 我想創建兩個Windows用戶帳戶,兩個存儲庫(每個用戶一個), 和模仿遠程存儲庫 - 所有在我的本地計算機。學習Git最佳實踐
我沒有本地網絡,但我確實可以訪問互聯網。 我特別感興趣的是解決拉衝突,在 多分支機構等工作。
請分享您的想法和經驗,以學習Git的最佳途徑。
我有這個在我的.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'中進行推送,獲取和拉出,並且它在功能上與你在本地和遠程回購之間做的相同。
Gary,你已經給出了非常有用的命令,特別是在同一臺機器上有遠程和本地的命令。你能解釋一下,如果可能的話,將兩個不同用戶的變化推送到遠程(本地設置什麼),那麼我們該怎麼做?我們是否需要在各自的.git/config文件中配置這些用戶? –
是的。例如:'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'。 –
你的文件系統(假設你叫origin
)可以創建一個第一儲存庫和內部運行:
git init --bare
然後,你可以做第一個克隆有:
git clone origin clone1
而且一第二個:
git clone origin clone2
然後,您可以提交,推入並拉入每個克隆進行訓練。
使用bitbucket作爲遠程存儲庫,它是免費的。然後你可以在你的機器上安裝兩份... – sashkello
最好的學習方式有時只是rtfm,但肯定不會在論壇上提出這樣的問題。 –
git不能練習 – prusswan