2010-08-18 70 views
5

我的用例從很多東西開始,如this;一個團隊使用中央存儲庫(在我的情況下它是顛覆,但我相信如果它是混帳問題會是相同的),並且一些文件是成員專用的(Django本地設置文件,IDE私人項目首選項等) 。雖然私有文件應該保持私有狀態 - 也就是說,我不希望對其進行更改以便推送或提交 - 我希望跟蹤文件並控制版本。如何告訴git(或其他dvcs)私密跟蹤文件?

最好的選擇是默認情況下保持文件私密的方式;一種解決方法將是一種保持私人提交的方式 - 必須記住單獨提交私人文件會是一件討厭的事情,但仍然比根本無法跟蹤它更好。

與建議的解決方案相比: thisthis不好,因爲它們阻止文件被提交;這不是我想要的。我希望它在當地犯下;我只是不希望它發佈。順便說一下,雖然我喜歡DVCS,而git一直是一種違約,但我並不特別關心它(雙關)。如果只有hg或bzr可以做到這一點,這可能是我的切換理由。

回答

1

我會建議有一個設置文件夾,並在它下面爲每個用戶的文件夾。如果你有一個體面的操作系統,那麼就有一個環境變量和登錄用戶的名字。然後

你的目錄結構將是:

Project 
/Settings 
/User1 
/User2 
/User3 

現在一切都在檢查,每個用戶都有它的目錄。下一步是在build腳本,項目文件和腳本中使用用戶特定部分,或者使用環境變量。

2

我管理這個的方式,我不知道這是否符合您的情況,是創建一個模板文件,例如settings.txt.template,它駐留在已提交的回購中。然後在本地設置您的個人文件(將settings.txt添加到.gitignore文件中)。

否則你可能看git的子模塊http://book.git-scm.com/5_submodules.html

+0

+1提子模塊東西。 – sampablokuper 2013-03-09 23:46:16

1

髒的hackish辦法做到這一點是保持私有的文件不同的版本控制系統比主項目下的內容。例如,忽略.gitignore中的首選項文件,但在目錄中創建Mercurial存儲庫,該目錄忽略除首選項文件以外的所有內容。這至少可以讓你跟蹤每組文件中的變化,但是它不允許相互關聯。

1

也許你可以將你的文件存儲在一個單獨的git文件夾中,並使用一個.gitignored符號鏈接?

2

如何忽略具有用戶偏好的忽略子文件夾?與schoetbi建議類似,但只是一個文件夾,而不是每個用戶。

/Project 
    /Foo 
    /Bar 
    /Preferences 

在/Project/.gitignore,線/Preferences忽略/項目/偏好。並在/ Project/Preferences中初始化一個'祕密'回購。 (因爲外部回購並不知道它,所以我稱它爲祕密)。如果其他軟件在其主要回購部分中預期其某些特定文件,則可以在/ Project/Preferences中創建符號鏈接夾。符號鏈接可以跟蹤或不跟蹤;它應該在一段時間內基本穩定,所以你不會關心它的歷史,它的歷史無論如何都將獨立於主項目,所以我可能會忽略它。

您不需要/ Preferences下的/ Project,但它必須位於相對於/ Project的一個位置,以符合鏈接的想法才能工作,所以我會將其保留在下方。初始化另一個存儲庫下的存儲庫是完全正常的,只要外部存儲庫忽略內部存儲庫即可。我使用我的〜文件夾和項目在我的〜文件夾下執行此操作。

即使您可能邏輯上希望您的用戶首選項與您在主repo中進行的某些提交相關聯,但這對於git來說基本上是不可能的,因此您必須在提交之間進行手動同步在你的主要回購和那些在你的祕密回購中提交的偏好。 Git從根本上關心整個回購的狀態(這意味着它正在跟蹤的所有事情),它永遠不會提交部分提交。 (因爲即使取出單個文件,提交的SHA-1哈希標識也完全不同)。

0

或者,也許,讓Git忽略在此文件中的變化:

git update-index --assume-unchanged <file name> 
0

mine做這行的git,如果你添加一個全局SVN忽略*_mine_*規則這應該只是罰款爲SVN。

免責聲明:默認情況下它不會,反而會讓你的備份和恢復相匹配的*_mine_*忽略規則