2010-03-23 47 views
7

我是一個研究生,有許多腳本,bibtex中的參考書目數據,latex中的論文草稿,open office中的演示文稿,scribus中的海報以及數字和結果數據。我想在版本控制下將所有內容放在一個項目中。然後,當我需要處理諸如參考書目數據等部分時,我想檢查該子目錄,根據需要對其進行修改並將其合併回去。我希望能夠檢出一個版本到我的家用計算機,以及與我的工作計算機不同,並獨立進行更改,最終將其合併回來。我還希望能夠從這個大型項目中檢出一段代碼,並將其與版本導入到一個單獨的項目中。如果我可能改變,我希望能夠將它們合併回原始項目。Git子樹在做部分克隆時沒有正確使用.gitignore

基於我的理解Git子樹可以做到這一點。

http://github.com/apenwarr/git-subtree

有是沿着什麼,我試圖做的線爲例:

http://psionides.jogger.pl/2010/02/04/sharing-code-between-projects-with-git-subtree/

說我的項目的主幹包含的目錄:(BIB斌cfg data fig src todo)。

當我使用

git subtree split -P bib -b export 
git checkout export 

我得到一個圍脖目錄,加上是應該被忽略的或考慮二進制基於的.gitignore,如它在結束src目錄和一切所有文件代字號或./data目錄。

[email protected]:~/research/trunk$ ls * -r 
biblography.bib JabRef 

src: 
script1.sh~ README~   script2.sh~ 
script3.sh~ script4.R~ script5.awk~ 
script5.py~ 

cfg: 
cfgFile1.ini~ cfgFile2.ini~ cfgFile3.ini~ 

bin: 
bigBinaryPackage1 bigBinaryPackage2 

[email protected]:~/research/trunk$ 

我的.gitignore文件如下:

*.doc diff=word 
*.tex diff=tex 
*.bib diff=bibtex 
*.py diff=python 
*.eps binary 
*.jpg binary 
*.png binary 
./bin/* binary 
*~ 

如何避免這種情況?

+1

您是否使用子模塊查看過?他們是專爲這種事情設計的,而且更自動化一些...... – Cascabel 2010-03-23 21:41:18

+1

感謝您的評論。據推測,Subtree具有很多優點: http://apenwarr.ca/log/?m=200904#30 – 2010-03-23 21:48:08

+0

@D W:這很公平 - 子模塊遠非完美。只是想確保它在那裏作爲一個選項。 – Cascabel 2010-03-23 21:54:15

回答

4

在我看來,所有那些被忽略的文件實際上並不在您的回購庫中 - 它們只是您之前結帳時剩餘的。

由於您從原始項目中提取了特定的子樹,因此您的.gitignore文件不再存在,因此文件不再被「忽略」,因此您將看到它們處於git狀態。但他們也不是你回購的一部分;他們只是坐在那裏。

嘗試使用'git clean'來清理它們。

+0

環境問題如node_modules或vendor? – 2016-07-18 11:35:11

3

我認爲這不是真正特定於git-subtree的任何東西,如果您在兩個分支之間切換,並且其中一個生成了一些額外的gitignore文件而另一個不知道關於他們......我會說這種git行爲是相當正確的,因爲如果我向gitignore添加一個文件,我希望它完全忽略它,並且不會對它做任何事情 - 包括也不會刪除它轉移到它不是gitignored的分支...

可以應對這種可能的方式是:

  • 在子目錄中的同一文件添加也給gitignore /子項目
  • 做git的清潔你轉換分支
  • 忽略此之前,畢竟,你可能不會在git subtree split生成的分支中做很多工作,除了在外面推送提交之外...如果你想分開處理子項目,那麼可能只是在另一個子項目中籤出子項目本身主目錄之外的目錄。
0

您的.gitignore文件混合不正確gitignore語法與gitattributes語法。

.gitignore文件應該只有模式。東西像

*.py diff=python 
*.eps binary 

改爲屬於.gitattributes文件。