7

git ブランチを git タグに変換するための最善かつ最も安全な方法を探しています。手動で svn リポジトリを移植するとき、私は基本的にすべてのブランチをコピーし、マイナー リリース (1.1、1.2、1.3) ごとにブランチを作成しました。当時、私はタグよりもブランチの方が快適でした。現在、ブランチ 1.5、1.6、1.7、1.8 がありますが、常に 1 つのバージョンのコードしか展開されていないため、ホット フィックスをそのバージョンに入れる必要がある場合に備えて、最後のバージョンをブランチにするだけで十分です。展開されます。だから私はgitブランチをgitタグに変換する最良の方法を探しています。私には方法があると思いますが、それがどれほど良いかを確認しました。

これまでに行ったことは、タグに変換するブランチごとに、マスター ブランチにないブランチにコミットがないことを確認したので、次のようにしました。

git log 1.5 ^master
git log 1.6 ^master
git log 1.7 ^master

これらはすべて、これらのブランチのすべてのコミットがマスターに存在することを意味すると私が信じているものは何も返しません。これを行ったのは、マスターにないブランチにコミットがある場合、ブランチをタグに変換するときにそれらを失うと想定したためです。タグは 1 つのコミットへの単なる「ポインター」であり、開発ラインではありません。それは良さそうに見えますが、私の仮定は、私がしなければならないことです:

git tag 1.5v 1.5
git tag 1.6v 1.6
git tag 1.7v 1.7

次に、ブランチをローカルで削除し、それらの変更をリモート リポジトリにプッシュするだけです。これは git ブランチを git タグに変換する最良の方法ですか?

また、私が持っている1つの懸念は、誰かがたとえば1.7からブランチを作成し(誰もそうすべきではありません)、そのブランチを削除する変更をプルした場合、それらの変更を別のブランチ(マスターなど)にマージできるか、またはそのようなものでしょうか彼らが作成したブランチを壊しますか?これは、最後のバージョン (この場合は 1.8) 以外のブランチ バージョンからブランチを作成してはならないため、発生すべきではありませんが、人々は常に適切に手順に従っているとは限らないため、方法があることを確認したいと思います。これが発生した場合に修正します。

4

2 に答える 2

6

簡単な答え:それは問題ではありません。また、提案した方法でタグを作成することも-mできますが、コメント付きの注釈付きタグを作成するオプションを使用することをお勧めします(を参照)。これにより、追加の引数なしでなどman git-tagによって使用される「ファーストクラス」タグが作成されます。git describe

長い答え: リモートブランチはローカルブランチに直接影響しません。ブランチからブランチを作成した場合、またはパブリックリポジトリからタグを作成した場合、そのブランチを削除してリポジトリをフェッチすると、ブランチがなくなったことがわかりますが、私のリポジトリはまだ完了しています。

ブランスは、gitリポジトリのコミットの象徴的な名前にすぎません。HEADをコミットすると、作業中のブランチが新しいコミットを指します。タグはコミットの象徴的な名前でもありますが、これは変更できません(ただし、削除することはできますが、変更することはできません)。そのため、タグは履歴内の固定位置を指し、分岐点は移動ヘッドを指します。歴史の1行の。gitのコミットにはゼロがあるため、元のブランチまたはタグがリモートから削除された場合でも、1つ以上の親コミット(初期コミットの場合はゼロ、通常のコミットの場合は1、マージの場合は複数)があります。ローカルブランチへのポインタ。これから共通の祖先を見つけることができるので(ブランチが最初に関連していると仮定して)、ブランチに加えられた変更をマスターにマージできます。

svnからgitに移行することは、最初は少し混乱する可能性があります。あなたはまだsvn用語で考えているようで、すべてをより混乱させています。gitをソース管理ツールではなく、高度なファイルシステム(Linus Torvaldsが作成したときのファイルシステム)と考えると、より簡単だと思います。また、コンピューター科学者のためにgitを読む(またはざっと読む)のに少し時間がかかることをお勧めします。それは思ったほど難しくはありません。そして、それが実際にどのように機能するかをよりよく理解することは、「正しい方法」を考えるのに役立ちます。;)

于 2011-06-15T12:53:00.857 に答える
3

私が理解しているように、ブランチの代わりにタグを作成して、他の人がこれらのブランチにコミットし続けるのを防ぎたいと考えています。

残念ながら、特に Git は分散型 VCS であるため、人々が好きな場所からブランチを作成するのを防ぐことはできません。ただし、コミットを中央リポジトリにプッシュできるかどうかを決定できます。したがって、祖先に特定のコミットがあるコミットを禁止するフックを作成できます。

于 2011-06-15T12:15:56.160 に答える