2011-09-08 81 views
7

我知道,你可以使用相關聯的空混帳與文件

git commit --allow-empty 

把沒有實際的文件修改提交到倉庫提交提交。

我遇到的問題是我需要能夠創建與存儲庫中各種文件相關的空提交。換句話說,我希望能夠把一些空提交了其

git log -- <filename> 

將顯示提交,但我不能想出一個辦法做到這一點。

謝謝!

+5

是不是一個空的提交定義不涉及任何文件?你究竟想要做什麼? –

+0

@Jeff:做一個空的提交有什麼用? –

+0

@Carl我試圖做一個空的提交與特定的文件相關。 – Jeff

回答

7

git log --help

[--] <path>... 
    Show only commits that affect any of the specified paths. 

你想git log <path>...顯示提交,做影響指定的路徑。這不會發生。

但是,您可以執行的操作是將文件名置於提交消息中,然後使用git log --grep=<filename>

也許你不希望它在提交消息?然後將其放入提交說明中:git notes add -m <filename>。你可能不得不寫一個小腳本來grep註釋,但git管道應該使這很容易。

+0

我不是要求'git log'的行爲改變 - 我希望它顯示受影響的路徑。我正在尋找的是一種告訴git將路徑X作爲空提交的受影響路徑的方法。 – Jeff

+1

@Jeff:@drizzd和Carl Norum是非常正確的 - 一個空的提交(在這個意義上)*根據定義*沒有引入任何更改,所以沒有「受影響的路徑」。沒有改變'git log'的行爲就沒有辦法做你想做的事。 –

+0

我不知道你爲什麼還提到'git log',但正如我所說的,我並沒有要求改變它的行爲。我所希望的是一種告訴'git commit'將某些路徑標記爲受影響的方法,即使diff爲null。然後,所有其他'git'子命令在顯示受影響的路徑方面都會做正確的事情,包括'git log'。 – Jeff

5

這個不能做的原因是,對於git來說,提交是當時項目中所有文件狀態的快照,並且受影響的文件通過比較提交後的推斷給其父母。 (受影響的文件就是那些在兩者之間不同的文件。)因此,沒有辦法人爲地將路徑標記爲受影響的,因爲提交併不直接存儲該信息。

您可以做的一件事是更改有問題的路徑上的文件權限(即設置或取消設置組可寫) - 即使文件內容相同,也會將其捕獲爲更改。如果你不想讓權限保持不變,你總是可以有兩個相鄰的提交 - 一個更改權限,另一個更改它們。這有點混亂,但它會起作用,尤其是如果文件權限不重要的話。