gitリポジトリを保護したいので、マスター以外のブランチだけを上書きすることができます。選択したブランチだけを保護する方法はありますか?gitで選択されたブランチへの非早送りプッシュを防ぐ方法を教えてください。
答えて
を参照してください。
そして、すべてのブランチの履歴変更をブロックする必要がある場合は、git config --system receive.denyNonFastForwards true
は単にジョブを実行します。
This SO answerあなたが探しているものを提供します。ただ、代わりに、masterブランチに適用することを編集:
#!/bin/sh
# lock the master branch for pushing
refname="$1"
if [ "$refname" = "refs/heads/master" ]
then
echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
echo "You cannot push to the master branch."
echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
exit 1
fi
exit 0
更新:
これは、すべてが早送りなどのマスターブランチにプッシュしなくなります。
これにより、選択したブランチへのプッシュが防止されます。早送りを許可する必要があります。 –
[ここで、誰かが更新スクリプトの強制的な状態を検出する方法を見つけました。](http://stackoverflow.com/a/12258773/444255)長い説明、最後のスニペットはまだ完了する必要があります... –
あなたはdenyNonFastForwards
git config --system receive.denyNonFastForwards true
を設定することにより、非早送り更新を防ぐことができます。しかし、それはすべての支店に適用されます。詳細情報については は、あなたが非早送りがきめ細かなアクセス許可を使用してプッシュブロックするようにセットアップごとのブランチ権限(管理者)にGitEnterpriseを使用することができますProGit
私はそれがあなたのリポジトリにアクセスするためにサーバー側で何を使用するかによって異なると思います。 GerritまたはGitlabのようなブランチごとのアクセス許可をサポートするサーバーアプリケーションがいくつかあります(ただし、Gitlabがユースケースをサポートしているかどうかはわかりません)。 Gerritは私の会社で同様のワークフローを使用しているので、これをサポートしています。
Gitoliteはこれをサポートしています(これはGitlabが使用するものです)。設定が簡単ですが、GerritやGitlabのようなWebインターフェイスはありません。
その他のコメント:GitEnterpriseは、お勧めのように、良い解決策でもありますが、自分のサーバー(多くの企業で共通)があれば、私の提案は適しています。
私は自分自身で使用するための更新フック(コピーからフックへのコピー)です。このスクリプトはデフォルトですべての非高速フォワード更新を拒否しますが、明示的に設定されたブランチに対して許可します。マスターブランチ以外のすべてのものに対して、早送りではない更新が許可されるように、反転するのは簡単です。
#!/bin/sh
#
# A hook script to block non-fast-forward updates for branches that haven't
# been explicitly configured to allow it. Based on update.sample.
# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
#
# Config
# ------
# hooks.branch.<name>.allownonfastforward
# This boolean sets whether non-fast-forward updates will be allowed for
# branch <name>. By default they won't be.
# --- Command line
refname="$1"
oldrev="$2"
newrev="$3"
# --- Safety check
if [ -z "$GIT_DIR" ]; then
echo "Don't run this script from the command line." >&2
echo " (if you want, you could supply GIT_DIR then run" >&2
echo " $0 <ref> <oldrev> <newrev>)" >&2
exit 1
fi
if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
exit 1
fi
# --- Check types
# if $newrev is 0000...0000, it's a commit to delete a ref.
zero="0000000000000000000000000000000000000000"
if [ "$newrev" = "$zero" ]; then
newrev_type=delete
else
newrev_type=$(git cat-file -t $newrev)
fi
case "$refname","$newrev_type" in
refs/tags/*,commit)
# un-annotated tag
;;
refs/tags/*,delete)
# delete tag
;;
refs/tags/*,tag)
# annotated tag
;;
refs/heads/*,commit)
# branch
# git rev-list doesn't print anything on fast-forward updates
if test $(git rev-list "$newrev".."$oldrev"); then
branch=${refname##refs/heads/}
nonfastforwardallowed=$(git config --bool hooks.branch."$branch".allownonfastforward)
if [ "$nonfastforwardallowed" != "true" ]; then
echo "hooks/update: Non-fast-forward updates are not allowed for branch $branch"
exit 1
fi
fi
;;
refs/heads/*,delete)
# delete branch
;;
refs/remotes/*,commit)
# tracking branch
;;
refs/remotes/*,delete)
# delete tracking branch
;;
*)
# Anything else (is there anything else?)
echo "hooks/update: Unknown type of update to ref $refname of type $newrev_type" >&2
exit 1
;;
esac
# --- Finished
exit 0
スクリプトを修正して、マスターブランチ以外のすべてに対して高速でないフォワード更新が許可されるようにすると便利です – Ren
サーバーを変更することが許可されている場合は、サーバー上での早送りが有効になります。
ssh ip 'echo $"[receive]
denyDeletes = false
denyNonFastForwards = false" >> /path/to/repo/config'
#then git push -f origin master
- 1. ノーマルからフィートトップへのスナップを防ぐ方法を教えてください。
- 2. Xcodeでこれを防ぐ方法を教えてください。
- 3. ダイアログとドロップダウンリストのためにwpfフライアウトパネルが早すぎるのを防ぐ方法を教えてください。
- 4. WebAPIへのAjaxコール - 送信ボタンのスパムを防ぐ方法を教えてください。
- 5. tableView.allowsMultipleSelectionDuringEditing = YESから行を選択すると、青色のハイライトを防ぐ方法を教えてください
- 6. ダーツパッケージでギブスの増殖を防ぐ方法を教えてください。
- 7. バックスペースがjavascriptで戻るのを防ぐ方法を教えてください。
- 8. Railsヘルパーでタグのサニタイズを防ぐ方法を教えてください。
- 9. Pythonのサブプロセスで無限ループを防ぐ方法を教えてください。
- 10. SQL Serverでゼロ除算を防ぐ方法を教えてください。
- 11. レールで「不明な列」エラーを防ぐ方法を教えてください。
- 12. クッキーを使ってポップアップを防ぐ方法を教えてください。
- 13. Internet Explorerがドラッグされたファイルを開くのを防ぐ方法を教えてください。
- 14. クロムエクステンションのリソースのキャッシュを防ぐ方法を教えてください。
- 15. CruiseControl.NETの同時ビルドを防ぐ方法を教えてください。
- 16. WPF Toolkitカレンダーコントロール - 翌月のスクロールを防ぐ方法を教えてください。
- 17. PHPセッションの開始を防ぐ方法を教えてください。
- 18. WCFプロキシがリダイレクトするのを防ぐ方法を教えてください。
- 19. コンテンツがフレックスアイテムのサイズ変更を防ぐ方法を教えてください。
- 20. カスタムホームランチャーアプリの再起動を防ぐ方法を教えてください。
- 21. Ackerman関数がスタックのオーバーフローを防ぐ方法を教えてください。
- 22. カスタムナビゲーションバーの伸びを防ぐ方法を教えてください。
- 23. オーディオクリップの停止を防ぐ方法を教えてください。 (Javascript&PHP)
- 24. キーナビゲーションが非表示(非表示)タブに集中するのを防ぐ方法を教えてください。
- 25. Swiit 3で選択されていないuiTableViewCellへのアクセス方法を教えてください。
- 26. jQuery - Mailchimpが成功のページを送信時に開くのを防ぐ方法を教えてください。
- 27. スーパークラスがオーバーライドされたサブクラスメソッドを呼び出すのを防ぐ方法を教えてください。
- 28. 中断された場合にプログラムがデータを失うのを防ぐ方法を教えてください。
- 29. Gitで不正なプッシュされたコミットを修正する方法を教えてください。
- 30. openALでオーディオレコーディングデバイスを選択させる方法を教えてください。
denyNonFastForwards is notあなたが使うはずの「解決」。力のプッシュを拒否するgitフックを設定...これはこれを行う正しい方法です。 – Eric
@Eric非早送りプッシュを拒否するのは、実際にはGitHub/BitBucketに進む方法です。新しい自転車は発明されていません。 –
すべてのブランチですべての非高速転送を拒否した場合、どのように機能ブランチをマージしますか? – Eric