2012-04-19 55 views
10

我想要做的是在that question中已經描述過。但我想以一種實用且更通用的方式解決這個問題。所以使用情況如下:保持本地變更在git中無法實現的實用工作流程是什麼?

  • 我有幾個文件web.configcreateDb.sql或以任何其他幾個地方的變化
  • 我不希望提交這些文件,因爲更改是針對我的地方機器只有
  • 這些文件必須進行版本控制,而且變化是由相當往往對其中一些(特別是SQL腳本),所以我想收到這些文件
  • 要提交更新所有其他文件
  • 我希望能夠做到這一點沒有摩擦,在一個命令(使用豪華-git的,所以PowerShell是歡迎)

鏈接到的解決方案據說用git add -p,這是不實際的,人們總是手動挑選塊,或者有一種更方便的方法來做這件事是無聊的?

例如,下面的一個可以工作:

  • 如果將它們添加到索引,像git -add -A -EXCEPT web.config crateDb.sql之前過濾是在我的工作拷貝文件的能力。然後我可以將一個git別名映射到這個,就是這樣。
  • 如果有能力取消存儲。我的意思是從工作副本中刪除包含在特定存儲中的更改。所以我將不得不在每次提交前都做類似git stash -deapply的事情,這也很好。

這個問題很常見,目前還沒有解決方案,這很奇怪。例如。 TortoiseSVN具有「忽略提交」功能,Perforce允許將該類型的本地更改存儲在單獨的更改列表中,並且永不提交它...

任何想法?

+0

除了提交更改之外,您還可以如何「版本控制」這些文件?在git中,提交_is_本地和_push_影響其他計算機/回購。對我來說,這個味道像是一個更好的解決方案,就像[this](http://stackoverflow.com/questions/6009/how-do-you-deal-with-configuration-files-in-source-control)。 – 2012-04-19 21:08:30

+0

我有一個更好的配置文件解決方案 - [NConifig](https://github.com/Yegoroff/NConfig),但問題是我不僅有配置文件。 – Restuta 2012-04-19 21:14:02

回答

10

你可以嘗試做提交你的git之前執行以下操作:

git update-index --assume-unchanged web.config crateDb.sql 

從git的幫助:

--assume-不變

--no-承擔─不變

當這些標誌被指定時,爲 路徑記錄的對象名稱不會更新。相反,這些選項設置並且 取消設置路徑的「假定不變」位。當「假設 位已打開」位時,git停止檢查工作樹文件中是否存在可能的修改,因此當您更改工作樹文件時,需要手動取消該位以告知 git。在處理具有非常緩慢的lstat(2)系統調用(例如cifs)的文件系統上的大型項目時,有時會有所幫助。 。

這個選項也可以用來作爲粗略文件級別機制 忽略跟蹤的文件提交的更改(類似於什麼的.gitignore 確實爲未跟蹤文件)。如果Git需要 在索引中修改此文件,它將失敗(優雅地)。合併時提交;因此, 萬一假設未跟蹤文件在上游發生更改,您將需要 來手動處理這種情況。

+0

之後git會如何表現?它會繼續跟蹤這些文件嗎?如果我會得到將會發生的更新? – Restuta 2012-04-19 20:40:39

+0

+1這解決了這個問題。 – ralphtheninja 2012-04-19 20:52:26

+1

@Restuta這些文件仍然會被git跟蹤,但git會暫時將它們視爲沒有更改,即使它們已經更改。所以git status等不會報告被更改的文件。使用--no-assume-unchanged撤消該命令,讓git再次關心更改。 – ralphtheninja 2012-04-19 20:54:02

相關問題