2017-05-15 9 views
1

gitコミットを書いたことがあります。
私はそれらをgithubにプッシュする前に、コミットごとにgit-clang-formatを実行して、履歴にきれいにフォーマットされたコードを取得します。一連のgitコミットでgit-clang-formatを実行する

これを達成するrebasegit-clang-formatの組み合わせがありますか?

答えて

5

これは、git filter-branchの仕事のように見えます。これは、あなたが望むコミットを書き換えることができます。これらのコミットはまだプッシュされていないので、コンテンツ(したがってSHA1)の変更は大きな問題ではありません。
リベースまたはチェリーピッキングが行う効果と似ていますが、再生される各コミットに対して任意のコマンドを実行できる点が異なります。

あなたはできrun a filter-branch over the last few commits

を参照してください "Reformatting Your Codebase with git filter-branch"、git-clang-format syntaxを考慮Elliot Chance

git filter-branch --tree-filter 'git-clang-format' -- <SHA1>..HEAD 

で、あなただけの各コミットで変更されたファイルにそれを適用することができます。例えば
は、.cppファイルについて:

git filter-branch --tree-filter 'git-clang-format $(\ 
    git diff-index --diff-filter=AM --name-only $GIT_COMMIT |\ 
    grep .cpp)' -- <SHA1>..HEAD 

アップデート2017年、Gitの2.14.x/2.15(Q4 2017)を使用すると、イラストを持っている:

commit 2118805commit 6134de6(2017年8月14日を参照してください。 )によってBrandon Williams (mbrandonw)
commit a36f631Junio C Hamano -- gitster --により合併、2017年9月25日)

のMakefile:スタイルのビルドルールを追加

HEAD間の差分 上git-clang-formatを実行します 'style' ビルドルールを追加します。現在のワークツリー。
結果は変更が示唆されています。

.PHONY: style 
style: 
    git clang-format --style file --diff --extensions c,h 
関連する問題