2017-06-10 72 views
1

我的問題是這樣的:我有一個git repo與.gitignore文件中的目錄。通常這是有效的,並且在目錄中更改的任何文件都將被忽略。但是,如果我從一個分支,不籤文件到忽略目錄忽略這些文件,即:從一個分支Git結帳文件沒有跟蹤他們

git checkout a_branch /c/IgnoredDirectory 

我覺得這應該被忽略的目錄和文件現在跟蹤,當我做

git status 

那麼,如何從一個單獨的分支添加文件,而無需通過他們的git跟蹤?我的想法是,git應忽略我添加的文件,因爲它們位於.gitignore文件的忽略目錄中。我在哪裏看到這裏錯了?

代碼:

我的.gitignore文件

RecordDataBases/ 

,當我從一個單獨的分支簽出的文件並運行git的狀態,我得到:

new file: RecordDataBases/AstroFiles 
    new file: RecordDataBases/AstroFiles_goodversion 
    new file: RecordDataBases/AstroFiles_old_file 
    new file: RecordDataBases/README.rtf 

感謝

回答

0

這是正確的:git checkout commit-specifier -- paths從指定的提交中複製指定的路徑,進入索引(也稱爲暫存區域)。一旦他們在索引中,他們跟蹤。然後它將文件從索引複製到工作樹,使用從任何目錄或glob擴展產生的相同完整路徑。

自認爲索引任何文件跟蹤顧名思義,你的任務是既避免讓他們進入指數擺在首位,或者後來又刪除它們。後者是更容易:

git rm -r --cached RecordDataBases/ 

例如(但請注意,它會刪除所有指數條目這樣的文件,由git checkout一步創建不只是索引項)。該--cached選項告訴git rm從索引而不是工作樹中刪除文件只有

可以,而不是做以上,提取規定提交文件,而無需首先將其複製到索引。最簡單的方法是使用git show,其語法爲git show commit-specifier:path > path,例如git show a_branch:RecordDataBases/AstroFiles > RecordDataBases/AstroFiles。除了需要重複每個路徑名,還有這裏有一些注意事項:

  • 這需要做一個文件在同一時間(有沒有簡單的方法來獲得整個目錄樹,包括子樹);和
  • 默認情況下,任何行尾,標識或塗抹過濾器操作均被省略。

但是,因爲這不會將擴展路徑首先複製到索引中,所以不需要將它們從索引中刪除。

+0

謝謝,這就是我一直在尋找的答案。 –

相關問題