2013-03-21 102 views
3

我可以告訴Git Git倉庫的地址是--git-dir。我可以告訴Git工作樹在哪裏與--work-tree。如何告訴Git gitignore文件在哪裏?如何告訴Git使用與「.gitignore」不同的gitignore文件?

問:爲什麼我想要做這樣的事情?

答:對於一些工作樹,我有兩個不同的Git存儲庫。其中一個位於.git的標準位置。這個庫用於普通的版本控制。另一個版本庫位於.git.sync。此庫用於在計算機之間進行定期自動同步。也就是說,這是我自己使用Git實現的小型Dropbox克隆和一個定期運行的小腳本。

理想情況下,我將能夠讓Git使用.gitignore.sync.git.sync存儲庫,而不是使用的Git它使用正常的版本控制非常相同的.gitignore

Q.爲什麼我不使用Dropbox? A.不同步符號鏈接。糟糕的Dropbox!

回答

3

您可以使用core.excludesfile指定新的忽略文件。默認情況下,這隻會影響當前的存儲庫;如果您想更改默認值,則可以使用--global選項。

git config core.excludesfile ".new_gitignore" 

編輯1

AFAIK,.gitignore不能禁用。它優先於.git/info/excludescore.excludesfile。我能想到的唯一方法是使用過濾器進行一些攻擊。 This answer很好地解釋了過濾器的使用。

+1

謝謝!顯然,除了'.gitignore'和'.git.sync/info/exclude',您還可以指定第三個gitignore文件。我還需要能***關掉***'.gitignore',因爲該目錄可能有一個'.gitignore',它不在我的控制範圍之內。 – Douglas 2013-03-21 01:57:03

+0

@Douglas,根據您的評論進行一些修改。 AFAIK沒有辦法關閉.gitignore。 – 2013-03-21 06:28:27

+0

@Srinkanth,感謝您的更新!不過,我很難弄清楚,如何使用過濾機制來解決這個特殊的問題。 – Douglas 2013-03-21 14:11:46

1

每個存儲庫都有一個info/exclude文件 - .git/info/exclude.git.sync/info/exclude中應該有一個文件。填充這些排除文件,就像您將要使用.gitignore一樣。

+0

謝謝!但是,我認爲這不會對我有用,除非我可以告訴Git也不要使用'.gitignore'。對於我與其他人合作的項目,我並不總是可以擺脫'.gitingore'。 – Douglas 2013-03-21 01:45:18

1

在大多數命令中,「.gitignore」似乎被硬編碼爲git中的每個目錄排除文件,優先於所有其他忽略文件。

然而,我創建一個小補丁GIT中克服此限制:https://gist.github.com/rev22/9954517

它添加下列配置選項:

core.ignoreperdir:指定爲「的.gitignore」替代作爲每個目錄 排除文件。如果未設置,則使用默認的「.gitignore」。 如果此項爲空,則不使用每個目錄的排除文件。