私は裸のレポに2つの枝を持っています、マスターとスペイン語で開発されている "desarrollo"。私は、中央の裸に競合を押し込むのを避けるために、事前受信フックを作成したい。このフックは中央の裸に配置されます。これは私が持っているものです。リモートベアレポに配置された受信前フックとのプッシュ競合を防ぐ方法を教えてください。
#!/bin/bash
protected_branch='master'
# check each branch being pushed
while read local_ref local_sha remote_ref remote_sha
do
if git diff "$old_sha" "$new_sha" | grep -qE '^+?(<<<<<|>>>>>)'; then
echo "Saw a conflict marker in $(basename "$refname")."
exit 1
fi
remote_branch=$(echo $remote_ref | sed -e 's,.*/\(.*\),\1,')
if [ $protected_branch = $remote_branch ]
then
echo "ABORT PUSH: Not allowed to push directly to $protected_branch."
exit 1 # push will not execute
fi
done
exit 0
最初の部分は、競合ファイルのプッシュを防ぐことにある、第2の部分は、私が唯一desarrolloブランチにプッシュできるよう、マスターするプッシュ防ぐためです。 2番目の部分は完全に機能しますが、最初の部分はプッシュを妨げていませんが、マークアップ付きのファイルをアップロードしようとするとエラーをスローしません。私は、さまざまなソースからの両方の部分をコピーしたと言うので、そこになければならない必要があります
if git diff "$old_sha" "$new_sha" | grep -qE '^+?(<<<<<|>>>>>)'; then
echo "Saw a conflict marker in $(basename "$refname")."
exit 1
fi
:私は念の競合ファイルが、全体のプッシュを拒否していない紛争における単一のファイルでもあり、トランザクションは完全に失敗します変数名に何か間違っている、私はちょうどold_shaとnew_sha変数が知って欲しいのは、これが失敗している理由です。なぜなら私はフックを作ることが特に良いわけではないからです。
EDIT: 7 '< < < < < < <'今、それはperfec最終的なスクリプトは
#!/bin/bash
protected_branch='master'
# check each branch being pushed
while read old_sha new_sha refname
do
if git diff "$old_sha" "$new_sha" | grep -qE '^+?(<<<<<<<|>>>>>>>)'; then
echo "Saw a conflict marker in $(basename "$refname")."
exit 1
fi
remote_branch=$(echo $refname | sed -e 's,.*/\(.*\),\1,')
if [ $protected_branch = $remote_branch ]
then
echo "ABORT PUSH: Not allowed to push directly to $protected_branch."
exit 1 # push will not execute
fi
done
exit 0
これはうまくいきましたが、問題は、「desarrolloの競合マーカーを見た」というメッセージに関係なくプッシュを拒否し続けるということです。競合するファイルがないようです..... git diff - -name-only --diff-filter =そのコマンドでUIがチェックされていて、リストが空です.....チェックしていますか?<<<<<を使ってbashスクリプトの競合をチェックする正しい方法をしていますか? <<文字列か、より良い選択肢がありますか?...私のスクリプトはhttps://codeshare.io/266oZ – Juan
になりましたif文字列を '<<<<<'から '<<<<<に変更しました<<<<<を持っていて、衝突していないファイルがあり、gitがちょうど7 <を入れているからです。私の友人に助けてくれてありがとう。問題が解決しました – Juan