2015-02-23 102 views
3

我需要忽略對目錄的本地和遠程更改。比如我有遠程的git設定:Git忽略目錄而不對遠程進行更改

  • 模板/ T1
  • 模板/ T2
  • 模板/ TN

我想設置本地的git,使其只跟蹤了T2例如,並忽略其他人。

我試過是這樣的:

git rm -r --cached templates/T1 
    git rm -r --cached templates/Tn 

,然後添加這個到的.gitignore的模板目錄

/* 
    !/T2 

內,但這樣做後,我得到了一堆文件標記爲刪除的希望被推到遙遠的地方,我不想要這個。我需要遠程來保持所有的模板,但在這臺單一的本地機器上,我只需要跟蹤一個模板。

+1

相關:http://stackoverflow.com/questions/2673232/how-do-you-tell-git-to-permanently-ignore-changes-in-a-file – 2015-02-23 13:52:34

+0

你只需要**一個模板跟蹤**或者你只需​​要**一個模板簽出**? – 2015-02-23 13:54:11

+0

一個簽出可能是一個更好的方式說它 – Dexa 2015-02-23 14:02:47

回答

2

即使將其添加到.gitignore或exclude,也不能忽略已經跟蹤的文件。
你可以做的是寫一個預先提交的鉤子來恢復你不想跟蹤的目錄中的任何改變。

但是,您將在您的存儲庫中擁有它們!如果不打擾git,你不能刪除它們。

希望它有幫助!

3

要忽略git中的某些文件,應將它們從遠程服務器上刪除並添加到.gitignore中。所以這種方法不適合你。

要將文件保存在遠程服務器上但不跟蹤它們,您可以使用git update-index --assume-unchanged files。這將保留遠程的T1,Tn文件的一些初始版本,並且不會在您的本地回購中追蹤它們。因此git status將不會列出更改的T1,Tn。

1

既然你在,你只需要一個模板簽出的評論說,我想建議你使用控釋片sparse-checkout的。

你可以看看this answer,這會更詳細地解釋它,但我會爲你的情況提供一個具體的例子。


  1. 激活sparse-checkoutgit config core.sparsecheckout true
  2. 創建sparse-checkout文件.git/info;你需要specifiy的文件模式,你要檢出

在你的情況下,這個文件看起來是這樣的:

*    # Add everything for checkout 
!templates/  # Don't checkout the content of templates 
templates/T2 # Checkout T2 in templates 
  • 更新你的工作樹git read-tree -m -u HEAD
  • 最後的命令應該在你的倉庫的根目錄下執行,並帶有一個乾淨的工作樹(沒有更改的文件等)。

    這應該會使您的工作樹templates目錄爲空,但T2文件除外。