2017-04-25 78 views
0

我在一個git倉庫的情況下,我想保持一個文件不變,除非開發人員明確知道他們在改變它時正在做什麼。有什麼方法可以在git中跟蹤文件的不變狀態嗎?

我們有一個Drupal網站在回購中,我們不想更改自定義robots.txt。更新Drupal核心包括解壓tarball。這意味着我們的定製robots.txt將替換爲Drupal robots.txt的庫存。由於Drupal的核心更新被大量接受(他們主要是安全更新),可能有些不小心的開發人員會不小心覆蓋我們的robots.txt

這不是你在合併請求中可以找到的東西,因爲在覈心更新中有幾十個文件發生了變化,而且你不打算審查所有這些文件。我發佈了another question,但回答涉及僅限本地的回購/環境更改,並且不會在回購中進行跟蹤。 我已經做了一些調查研究,這是我到目前爲止已經發現:

  • skip-worktree僅僅是本地屬性;沒有跟蹤。
  • assume-unchanged是一個本地財產只;沒有跟蹤。
  • .gitignore - 我試圖解開文件,忽略它,然後--force添加它。當我做出改變時,git仍然看到它們。這不是一個解決方案。
  • 掛鉤未在回購中追蹤。您可以配置它們以進行跟蹤,但需要設置本地環境才能開始工作,如果我們要這樣做,爲什麼不設置skip-worktree或其他設置。

目前沒有辦法阻止文件的更改從在repo本身內執行(在顯式/額外步驟之外,如交換機之外),在執行額外的本地配置之外?

我發佈這個問題的原因是因爲我試圖給我的經理一個明確的「不,我們不能跟蹤回購中的這些信息,我們將不得不在開發人員的環境中做額外的配置。

我在git-bash中使用git 2.12.0.windows.1

+1

你不能要求git忽略一個已經被跟蹤的文件,這樣它在所有情況下都是獨立的。任何你沒有適當的部署腳本來處理這些事情的原因? –

回答

0

答案是

沒有辦法阻止文件被正常更改,並告訴git跟蹤該狀態。

所有解決方案都涉及本地環境設置或遠程回購設置。

2

如果您正在託管自己的回購(而不是使用github),則可以在中央回購庫上編寫一個pre-receive掛鉤來檢測此問題。它會檢查推送是否引入了修改守護文件並拒絕它們的提交。

這有點欠佳,因爲直到開發人員在本地回購中完成工作,它才檢測到情況,它需要一些深奧的git-fu(如rebase -icommit --amend)來修復本地提交在重新推送之前。

+0

我們不託管我們自己的回購:/我們的託管提供商還提供存儲庫服務器。 – user151841

+0

從純技術角度講,可以肯定地說這個解決方案也不在追蹤中追蹤,因爲它只駐留在服務器中?那麼,如果回購商被推到一個新的遙控器上,那麼'預先接受'的掛鉤就不會跟着它了? – user151841

+0

@ user151841正確,這種方法*在倉庫中不被跟蹤,它只是託管「中央」倉庫的服務器配置的一部分。如果您的工作流程沒有一臺中央服務器,則它是非啓動器。 –

相關問題