2010-05-13 103 views
4

我唯一關心的是C++文件。 (不要擔心二進制文件,文本等...你可以假設一切都是C++ code_)。git補丁忽略空白差異C++

我有這些分支:

* dev 
    master 

現在,我可以創造一個新的分支「神奇」,其中分支魔法當量爲「開發」(在生成的C++代碼方面),但最大限度地減少無用whiteline差異(如插入額外的換行符)。

這可能嗎?

謝謝!

+0

您是否需要保留dev中的更改歷史記錄? – leedm777 2010-06-09 12:47:39

回答

0

git diff --ignore-space-change ...

+0

或'git diff -b',對吧? – rmk 2010-06-24 05:50:08

0

你可以嘗試建立一個post-merge hook這將:

  • 只能做任何事情,如果當前分支是魔術
  • 刪除的* .cpp文件的所有whitelines
  • 使新提交(因爲post-merge掛鉤不能直接影響git merge的結果)
1

你的問題對我來說還不完全清楚。我認爲你希望新分支包含一系列與dev中的「等價」的提交,但不包含不必要的空格更改。

最簡單的方法是使用git rebase --interactive。這允許您手動編輯一系列提交。您可以使用git rev-list HEAD | tail -n 1獲得第一個(「根」)提交的散列。如果你想編輯第一次提交,那就更困難了,但是對此有一個答案。

git checkout dev 
git checkout -b magic 
git rebase --interactive $(git rev-list HEAD | tail -n 1) 

這會按照時間順序調出提交列表的編輯器。您更改選擇編輯關於您希望更改的提交。 git會在處理每個提交之前暫停,允許您使用git commit --amend對其進行修改,然後繼續使用git rebase --continue進行重新設置。你當然可以運行腳本來清理文件,而不是手動編輯它們。如果您想根據與上一次提交的不同之處來執行此操作,則需要使用類似git cat-file blob HEAD^:filename的內容來提取之前的修訂版本,或使用git diff HEAD^ filename

如果你想自動化整個過程,那麼你可以使用git filter-branch --tree-filter script。有關詳細信息,請參閱git-filter-branch的手冊頁。

如果您想阻止將來的提交包含空白錯誤,您可以設置一個預先提交hook以禁止它們。

一旦你滿意的新分支魔術你可以用它來代替開發

git branch -m dev dev-old 
git branch -m magic dev 

但是請注意,這可能會導致人誰已經有副本問題dev在他們自己的回購。相反,做一個合併會更好。