2

免責事項

私はGITに少し慣れていないので、これが完全に間違っている場合は失礼します。私はSubversionを非常に長い間使用しており、GITの大きなメリットを理解しており、積極的に切り替えを試みています。しかし、私はこの問題を思いついたので、良いチュートリアルやハウツーを見つけることができないようです。これがアップストリームタグの適切な使用法です。

私がしたこと

私の例は、github.comがホストするリポジトリredmineを使用したものです。安定したリリースとブランチ、および現在実行中のマスター用の多くのタグが含まれています。

私は自分のシステムでそれを発行することによってそれをフォークしました

cd /srv/git-repos
git clone --mirror https://github.com/redmine/redmine.git redmine.git

次に、次のようにしてローカルフォークのクローンを作成しました

cd /opt
git clone /srv/git-repos/redmine.git

次に、github.comの指示に従ってリモートアップストリームを追加しました。

cd /opt/redmine
git remote add upstream https://github.com/redmine/redmine.git

かっこいい、この時点で、システムにRedmineのフォークされたコピーがあり、コミットしてプッシュおよびプルすることができます。また、上流に本物のredmineを追加しました。これもプルできます。

したがって、最初に実行したいのは、現在のインストールが実行されている状態でこの新しいリポジトリを取得することです。

簡単そうです:

# Checkout the older tag I'm on
git checkout v1.1.0

# Add a plugin as a submodule
git submodule add git://github.com/delaitre/redmine_time_tracker.git vendor/plugins/redmine_time_tracker
git submodule update --init --recursive

今、私はこれを私のフォークにコミットしたいと思います(私はすでに間違っていると確信しています)

git commit -m 'Added a new submodule'

私がいるところ

素晴らしい!私は今、gitを使用しないことから始めたところに戻っていますが、すべてがバージョン管理されており、安全であり、うまくいけば管理が簡単です。

問題

これの要点は、アップストリームのタグである新しいバージョン(v1.4.0)にアップグレードする前に安全にしたかったということです。

では、ローカルフォークに対して行ったコミットを維持しながら、アップストリームで新しいタグに切り替えるにはどうすればよいですか?

私は上で言いました(私はすでに間違っていたと思います)。いくつかの追加の読み物から、私はリモートタグを何らかの方法で分岐し、リモートタグに基づいて新しい分岐にコミットするべきだったと思います。これは、私が今、明らかに悪い「切り離されたHEAD状態」にあると確信しているためです。

探している

  1. タグから分岐するにはどうすればよいですか。
  2. この「分岐タグ」に名前を付けるためのベストプラクティスは何ですか(例:_v1.2.0、my_v1.2.0、local_v1.2.0)
    • 私は過度にアナルであり、誰がそれが名付けられたものをがらくたにするのですか?
  3. 次のステップ:新しいリモートタグ(つまりv1.4.0)にマージするにはどうすればよいですか?
  4. この新しいマージされたタグなどをコミットするにはどうすればよいですか。

結論

私は完全にベースから外れているのでしょうか、ナットであるのか、完全に間違っているのでしょうか、それとも要点を見逃しているのでしょうか?これは珍しいシナリオですか?これを行う方法に関するドキュメントを見逃していますか?

4

1 に答える 1

1

タグから分岐するにはどうすればよいですか。

git checkout -b newBranch yourTag

ご了承ください:

  • git clone --mirror https://github.com/redmine/redmineで十分です(.gitについて言及する必要はありません。これにより、代わりに「redmine」ディレクトリ、またはベアリポジトリ用に予約された命名規則であるreadmine.gitディレクトリが作成されます)
  • git checkout aTagデタッチされた HEAD モードのままになります。つまり、この時点で、新しいブランチを作成する必要があります。
git checkout aNewBranch

これにより、現在のコミット (現在はどのブランチにもアタッチされていません) から作成されます。
そして、サブモジュールに注意してください: それら自体は切り離された HEAD モードでチェックアウトされます: 「切り離された HEAD を持つサブモジュールを実際の HEAD に接続するにはどうすればよいですか?」 と「サブモジュールのリモートとブランチを再作成するにはどうすればよいgit clone --recursiveですか? 」を参照してください。

于 2012-08-10T07:25:57.027 に答える