文字通り、「交換 / バックアップ」リモートをミラー (一部またはすべての ref 更新を早送りするのではなく、「強制」スタイルの ref 更新を行う裸のクローン) として設定できます。
「通常の」クローンは、 の強制更新を行うように設定されていますrefs/remotes/*
: を見て.git/config
(または使用してgit config --get remote.origin.fetch
)、 のフェッチ refspecorigin
が
+refs/heads/*:refs/remotes/origin/*
プラス記号は「強制」、つまり「早送りを必要としない」ことを意味します。したがって、あなたgit fetch origin
がどのコミット SHA1 であっても (例: オリジンのrefs/heads/master
名前)、ローカルになりrefs/remotes/origin/master
ますrefs/remotes/origin/master
。これらの「リモート ブランチ」の SHA1 ポインタ名は、ローカルリポジトリのブランチの名前空間にまったく影響を与えないため、これは一般refs/remotes/
的に安全です (したがって、「通常の」クローンのデフォルトでもあります)。refs/heads
を使用する場合、git push -f
または で始まるプッシュ refspec を指定する場合+
(これはプッシュとフェッチの場合と同じことを意味します) は、非早送りも許可する必要があることをリモートに伝えます。(つまり、より良い表現が必要な場合は、早送りを許可する「組み込みフック」に指示します。プッシュ先のリモートの他の git フックは、変更を拒否する可能性があります。) これは一般的に安全ではありません。リモートリポジトリの名前空間に影響します: のようなものではなく、その を更新しています。しかし、自分が何をしているのかを知っていて、間違いを犯さないなら (または少なくとも頻繁には :-) )、結局のところ問題ありません。refs/heads/master
refs/pushes/JohnsMachineAtHome/master
また、git のすべてのコミットは、それを指す何らかの参照 (reflog など) がある限り、適度にスティッキーであることも覚えておいてください。そのため、特定の意味で、最初にコミットする限り、強制プッシュと強制フェッチは安全です。(例えば、あなたが失敗した場合、自宅/職場から職場/自宅に SSH 接続し、reflog を調べて、ミラーにドロップしたコミットを見つける必要があるかもしれません。) ベア クローン (ベア ミラー クローンを含む) に注意してください。 ) reflog の邪魔にならないでください (特に set を使用すると、いくつかのデータが保持されます。git core.logAllRefUpdates
config docs を参照してください)。これは、取得する更新がプッシュまたはフェッチ時にまとめて行われるためです。
これらの git config オプションも参照してください。
remote.<name>.push
The default set of "refspec" for git-push(1). See git-push(1).
remote.<name>.mirror
If true, pushing to this remote will automatically behave as if the
--mirror option was given on the command line.