2011-01-09 118 views
3

我有我的網站/ cms在git中跟蹤和它工作得很好,除了我的.htaccess文件。該文件需要根據我在哪個服務器上運行代碼(本地/測試/實時)而大不相同。因此,現在我已經完全保留了.htaccess的完整版(它位於我的.gitignore文件中)。但偶爾它會丟失,無論如何它都是網站的一部分,我希望它能夠保持跟蹤,但我不希望它被推送到遠程存儲庫,因爲它可能會覆蓋其他服務器的正確配置。有什麼辦法讓git保持一個文件的跟蹤,但只有本地? (或任何其他方式來解決這個問題?)git版本控制文件在存儲庫沒有推/拉

回答

2

你可以用Git的sparse checkout功能來做到這一點。在你想有一個特殊的,未追蹤.htaccess文件回購運行以下命令:

git config core.sparsecheckout true 
echo '*' >.git/info/sparse-checkout 
echo '!.htaccess' >>.git/info/sparse-checkout 
git read-tree --reset -u HEAD 

這將首先刪除現有.htaccess文件。但是現在它從Git的角度來看就被忽略了,所以你可以在那裏放置一臺特定的機器,Git不會爲此煩惱。

然後,您可以添加和管理.htaccess文件從一些其他存儲庫(說你的本地之一)。 Git很樂意跟蹤這個文件並將其保存在存儲庫中,但在具有上述稀疏結帳配置的計算機上,Git將忽略該工作目錄中的本地.htaccess文件,即使它與存儲庫中的文件不同。

+0

但是,這並不會讓Git跟蹤文件,這是OP所需的一部分。 – Amber 2011-01-09 07:25:56

0

保持你的.htaccess在一個完全獨立的Git倉庫,並在你的代碼是在目錄符號鏈接它(並保持它.gitignore倒是在原來的倉庫。)

0

您可能有多個分支,每個服務器一個分支,以便每個分支都有自己版本的服務器特定配置文件。然後,當您在主分支中進行更改時,其他分支將與其合併並獲取最新更改 - 但他們會保留自己的配置。如果配置文件發生了變化,那麼就需要手動合併,否則這可以通過腳本甚至githooks來實現。

1

聽起來像.htaccess文件的內容是特定於部署的,因此不是代碼的一部分。換句話說,這些文件可以由部署腳本生成以適應每個服務器,而不是保存在git中,然後每次提交時都必須覆蓋更改。

0

如果這是一個安全問題,答案將是「否」,因爲如果git跟蹤文件的歷史記錄,克隆該存儲庫的每個人都將獲得完整的歷史記錄。但是,如果您可以控制所有位置,只需要一種方式來跟蹤它,但是在其他位置以避免檢查它,也許git smudge和git clean filters可能會爲您做些事情。它們允許您在檢出並提交時編輯文件的內容。我不確定這是否合適,但我試圖想出一個可行的解決方案。

或者,使用替代名稱(即不是「.htaccess」)跟蹤文件,並且在適用的情況下,只有在適用的情況下,創建名爲.htaccess的符號鏈接才能跟蹤名稱。

相關問題