2009-01-21 66 views
29

由於Git有分支機構的具有完全不同的內容來跟蹤(並保持乾淨)彼此,在同一倉庫的能力,有些項目(如Git本身)已經開始使用的。具有完全不同內容的Git分支

的Git,例如,使用的代碼本身一個分支,同時保持它的文檔在一個單獨的分支。相同的回購,只是不同的分支機構。

這可能只是我,從SVN背景的,但我覺得它混淆在這些分支「普通無」。開發/分期/生產分支機構;那些我明白的。不完整特徵的分支;當然,我也是這樣做的。哎呀,每種語言都有一個分支的文檔。但沒有共同的文件?

這僅僅是Git中的一個功能(可能是一個未被充分利用和/或低於市場的),每個人都應該擁抱並習慣,或者一個懶惰的人不願意區分同一個項目的兩個方面可能會導致危險的濫用?

+1

由於顛覆將一切都視爲一個文件夾,難道不同的文件夾可以有完全不同的內容嗎? – 2011-07-25 23:22:05

回答

16

我個人不會在不同的分支中存儲不同的內容;在文檔和代碼的情況下,我只需創建一個myproject.git和一個myproject-docs.git(如果構建過程有必要,則將這些文檔子模塊編碼到代碼中)。

在另一方面,如果你這樣做沒什麼不好會發生。 Git不會告訴你該怎麼做,所以你可以自由決定如何使用它。所以要回答你的問題,這不是一個殺手級的功能,如果你不小心,它也不會讓你感到厭煩。這就是某人選擇使用它的方式。

+0

好吧,由於不小心,我總是可以將docs-branch與源代碼分支合併在一起,並且這會讓事情變得非常糟糕,我會想象的。或者Git會拋出並停下來。 OTOH,總是有回滾... – 2009-01-21 18:11:56

+0

是的,但是你不會丟失任何數據,你只會有一個沒有意義的分支。這就是爲什麼我會避免它,但它不一定是一個破壞交易的原因。 – jrockway 2009-01-21 18:19:03

3

這樣做的好處是,如果這是您感興趣的所有內容,就可以只提取文檔分支。就像jrockway所說的,如果需要,您可以使用另一個存儲庫和子模塊來執行此操作,但通過此功能創建一個「裸體」分支,你可以不選擇。

就我個人而言,我仍然在圍繞這一點。我明白爲什麼它可能是有益的,但我並不完全相信這是最好的方式。

2

這是一個有點怪異,當你使用呈現樹用戶的顛覆模式,但一旦你習慣的模式是少了很多混亂。

一個Git倉庫僅僅是一個解釋如何從一種狀態轉換目錄到另一個對象的樹。這些對象有一個父級。有些物體有兩個(或更多)父母;合併。有些物體沒有父母;最初的提交。

據我所知,在內部,Subversion的模型是類似的,減去合併來自何處的概念。這些只是一個方便的命令(svn merge)的新提交,用於獲取其他兩個提交之間差異的補丁。

我實際上經常使用此功能來管理從單獨主機上相同目錄啓動的配置文件,如/etc/apache2。這就像是說,「這是這個東西的另一個開始,但它被放棄了」。它允許我在覆蓋它們之前隱藏某些文件的狀態,但不必擔心它們是否合併,或者甚至與主分支有關。

在Subversion中,我不得不在一些不相關的地方(zip文件的某處)或存儲庫的子目錄中存儲備份。另外,在顛覆中,如果我在樹的當前視圖中刪除對這些文件的引用,則很難再次找到它們。

9

我想說這更像是一個懶惰的解決方法,因爲Git目前無法處理存儲在同一個存儲庫中的多個項目。你可以做到這一點,但沒有辦法拉下你想要的。

我說「懶」,因爲當git開發者自己發現需要它(用於存儲文檔)時添加該功能並不會太難。由於他們使用這種奇怪的分支黑客,他們爲其他人解決問題的動機已大大減弱。

3

我認爲這取決於你的項目是什麼。 (相同)存儲庫中的文檔,所以每個人都可以得到它們對我來說是有意義的(對我來說)。

另一方面,我不會在工作中存儲我的項目的文檔,因爲除非'讓我們更新文檔'類型的票據,否則我會對它們進行編輯。在工作中,我不希望我的文檔與源代碼混雜在一起,我只想要源代碼(我知道典型的程序員視圖)。

其他人可能想要他們在一起。我認爲你只需要意識到它的含義(記住每個人都有一個完整的版本庫),併爲你的項目選擇最佳選擇。

11

Git跟蹤項目中(文本)文件的協調更改,因此它不知道或在意分支是否可以合併。在Git倉庫中擁有獨立的分支機構類似於在Subversion倉庫中擁有獨立的項目,這是一種常見的做法(由於svn的開銷)。

由於Git的數據結構與SVN完全不同,因此可以對它們做不同的事情。在SVN中,一個特性分支有點不尋常,而一個不經常合併到主幹的特性分支可能是一種「難聞的氣味」,這表明程序員已經「變黑了」,並且正在創建可能永遠不能成爲代碼的代碼整合到項目中。在Git中,一個功能分支是一個完全安全和合理的工作流程。

因此,它們可以以不同的方式使用,因爲Git不是SVN,儘管它們都具有存儲庫和分支以及提交,並且提供與源代碼管理相同的一般功能。

由於我獲得了Git的更多經驗,原來奇怪剛成爲不同。然後我很好奇我能用這種不同的工具做什麼。

相關問題