2014-11-02 38 views
2

如何讓git忽略當前對文件foobar所做的修改,但不會進行任何未來的修改?假設沒有改變,但直到下一次更改

我在worktree一個文件,我提出,我不想犯背面的小變化。我可以使用git update-index --assume-unchanged foobar,但隨後git將忽略對此文件所做的任何其他更改。

我想告訴git忽略當前修改爲foobar,並警告我是否已經以任何其他方式更改。

所以,認爲update-index --assume-unchanged並不適用於這種情況下,有另一種方式來告訴git的,看foobar爲不變,只要只因爲它有當前內容或當前mtime

+0

它可能*不可能與普通的git,因爲你需要存儲舊版本的地方(只能在索引中),但你不想提交它。問題是'git commit'只是將整個索引寫入存儲庫。但我可能是錯的。 – Yogu 2014-11-02 13:15:36

+0

git將當前'mtime'記錄爲索引版本的'mtime'就足夠了,所以只有當某些應用程序改變它時,git纔會再次檢查它。這不是完全面向未來,但足夠好。 – gioele 2014-11-02 13:27:46

+0

我懷疑你可以,你必須建立一些事情來做到這一點。我認爲這不是Git工作流程的正常部分。你通常應該更清楚你的回購變化,而不是這個,我不知道你爲什麼要隱藏文件首先改變的事實。 – meagar 2014-11-02 13:29:06

回答

1

該文件的兩臺計算機之間共享;它正在由舊版本的應用程序進行更改,該版本的應用程序會刪除由較新版本創建的配置密鑰並且它不理解。

然後,它會更好地版本的文件,同時,和相當版本:

  • 該文件的模板
  • 2值文件(每個計算機)
  • 一個腳本能夠生成最終文件(它將保持私有)
  • a .gitignore要聲明一個content filer driver,這是一個塗抹腳本,它可以在結帳時自動觸發腳本並生成正確的配置文件,並使用正確的值檢測運行的計算機。

smudge

(從 「Customizing Git Attributes」 從Git Book圖像)

1

我怎麼能告訴混帳忽略一個文件 foobar的成爲當前修改,但沒有任何未來修改?

如果放在比指數和庫級別低一級存儲中的更高水平的「忽略」的概念,那麼你得到更高的靈活性,而你只需要適應您的工作流程/過程一點。

比方說,我對我真棒新的Hello World程序的工作,但我需要添加一些調試,同時開發,這是不是我想要成爲最終交付的一部分。我在這種情況下所做的只是將該更改作爲正常提交來檢查,但以特殊方式標記它,方法是前綴和後綴提交消息的字符串明顯突出其他提交消息。

gitk screenshot

當我一段時間後,要完成這項工作我只是過濾掉所有那些暫時提交。

$ git checkout -b deliver work 
Switched to a new branch 'deliver' 
$ git rebase -i master 

,然後用特殊標記提交信息的瑣碎,看看有什麼承諾刪除:

pick fdbd12a Mininmal main.c 
pick 21e3d6f hello world with arg support 
pick a62ebac ========= DEBUG: print argc ======== 
pick 3160605 Use EXIT_SUCCESS 
pick 0ec0ac6 constify message 

# Rebase 8ce6878..0ec0ac6 onto 8ce6878 
... 

,然後給了我一個乾淨的交付分支:

gitk screenshot

,我可以將它合併到我想要傳遞給的任何分支中。


你的情況,你可以在新的配置鍵爲

git add yourfile 
git commit -m "======== NEW CONFIG KEYS ========" 

,然後改變實例檢查只是篩選出交付時提交,或者可能有一個單獨的分支在哪裏工作這個提交是唯一的區別。例如。

git checkout -b computer_new computer_old 
git add yourfile 
git commit -m "======== NEW CONFIG KEYS ========" 
# do some work 
git commit -am "some work 1" 
git commit -am "some work 2" 
git commit -am "some work 3" 
# Rebase to put "NEW CONFIG KEYS" as the newest commit 
git rebase -i computer_old 

變化從

pick xxxxx ======== NEW CONFIG KEYS ======== 
pick xxxxx some work 1 
pick xxxxx some work 2 
pick xxxxx some work 3 

pick xxxxx some work 1 
pick xxxxx some work 2 
pick xxxxx some work 3 
pick xxxxx ======== NEW CONFIG KEYS ======== 

然後合併這些新的工作承諾回computer_old

git checkout computer_old 
git merge computer_new^ 

(分支^意味着一個承諾比最新的舊的在分支上提交h,例如合併到包括「一些工作3」承諾)。

相關問題