2 つのブランチで異なる構成ファイルがあります。この構成ファイルは各ブランチ内で追跡されますが、ブランチをマージするときは常に無視されます。
そのため、2 つのブランチをマージした後、ファイルはマージ前と同じように各ブランチに残ります。
2 つのブランチで異なる構成ファイルがあります。この構成ファイルは各ブランチ内で追跡されますが、ブランチをマージするときは常に無視されます。
そのため、2 つのブランチをマージした後、ファイルはマージ前と同じように各ブランチに残ります。
以下のフックを使用するには、次のようにします。
echo path/to/protected/file config >> .git/info/attributes
git config --add branch.server1.protect-attr config
属性config
とprotect-attr
分岐アイテムはそのための発明です。
.git/hooks/post-merge
:
#!/bin/sh
protect="$(git config --get-all branch."$(git branch|sed -n 's/^\*.//p')".protect-attr)"
if test ! -z "$protect"; then
git diff --name-only HEAD@{1} HEAD \
| git check-attr --stdin $protect \
| sed -n '/: unspecified$/!s,:.*,,p' \
| sort -u \
| sed -e 's,^,git checkout HEAD@{1} -- ",' -e 's,$," # protected file changed by merge,'
fi
foo
そして、ブランチ構成へのマージは、構成としてタグ付けしたファイルまたはその他のファイルへの変更が、それらを保護するようにマークされたブランチにマージされると、元に戻すコマンドをポップします..
$ git merge wip
Updating 9906beb..888556e
Fast-forward
foo | 1 +
1 file changed, 1 insertion(+)
git checkout HEAD@{1} -- "foo" # protected file changed by merge
|sh -x
パイプ ステージを追加して、元に戻すだけにすることもできますgit commit --amend --no-edit
。フルオートにすることもできます。これはほとんどスターター キットです。詳細については、githooks、gitattributes、およびgit configのマンページを参照してください。
より埋め込みやすい方法で git を再実装するlibgit2
プロジェクトがあります。それは git ではありませんが、すべての git を必要としない場合に利点があります。残念ながら、これを処理するにはまだ完全ではありません。そのため、制限されたクライアントではなく、完全な gitを使用していることを確認してください。
ours
まず、まだマージ ドライバがない場合は、マージ ドライバを作成する必要があります。これを行うには、次のコマンドを実行します。
git config merge.ours.driver true
このドライバーを使用すると、マージ セッション中に宛先ブランチのバージョンのファイルを優先できます。
次に、ブランチA
とB
.
branchのファイルのディレクトリに、次の行をA
含むという名前のファイルを作成します。.gitattributes
myconfig.conf merge=ours
次に、ファイルを追加してコミットし.gitattributes
ます。
にマージするとき、git は常にA
のバージョンを保持します。にもマージする必要がある場合は、ブランチに対して同じ手順を繰り返します。myconfig.conf
B
A
A
B
B