0

現時点では仮説ですが、ぜひ実践してみたいワークフローです。

すべての Web プロジェクトを開始するためのテンプレートがあります。現在、マスター テンプレートを保存するために github を使用しており、プロジェクトをビルドするたびに単純に複製しています。

問題は、私がより多くのプロジェクトを行うにつれて、テンプレートに役立つ機能があったことですが、現在のワークフローを使用してそれらを配置するのは難しいことです.

私が提案するのは、各プロジェクトの開始時に github からテンプレートを取得し、ローカル ブランチに沿ってプロジェクトをビルドすることです。マスター テンプレートで役立つと思われるものを見つけたら、マスター ブランチに切り替え、そこで変更を実装し、github に送信してから、reflog を使用してそれらの変更を現在のローカル プロジェクトの状態にします。

これは意味がありますか、そして私は(おそらく)reflogのポイントを完全に逃しましたか?

どうもありがとう

4

3 に答える 3

3

簡単に言えば、これは歴史を書き換えます。github を使用している場合、これは苦痛の原因となります。前に述べたように、reflog は定期的に使用するツールではありません。

あなたの場合、reflog を使用する理由はまったくありません。これを行うだけで、同じワークフローを持つことができます。my_local_projectブランチで作業していて、テンプレートに変更を加える必要があると想像してください。次に、次のようにします。

git checkout master
# Hackety, hackety, make the change in your template
git checkout my_local_project
git merge master

これで、ブランチに加えたすべての変更がクリーンな方法でmasterマージされます。my_local_project

プロジェクトをテンプレートとは別のリポジトリに保持している場合でも、これは (わずかな変更で) 機能します。

于 2011-03-30T15:02:27.017 に答える
3

私の意見では、reflog は git で最も醜いツールの 1 つです。自分の変更の 1 つを誤って壊してしまい、それを取得する方法が他にない場合を除いて、私は使用しません。

提案されたワークフローを考慮して、ローカルブランチですべてのコーディングを行うことをお勧めします。テンプレートに役立つ何かをコーディングすることになった場合は、マスターに切り替えて、プルしたい個々のコミットを選択してください.

http://www.kernel.org/pub/software/scm/git/docs/git-cherry-pick.html

于 2011-03-30T14:52:11.633 に答える
1

正直なところ、「reflogを使用して、これらの変更を現在のローカルプロジェクトの状態に持ち込む」という意味がまだわかりません。reflog は、特定の参照の過去の位置を表示するだけです。これらの変更を実際に他の場所に「持ち込む」には、マージ/リベース/チェリーピックする必要があります。一般に、マージは最もエレガントな方法です。

例えば:

git clone template local-project
cd local-project
git remote rename origin template-origin
# make changes and commit them
git add ...; git commit

# suppose changes have been made in the template (work as normal there)
# back in local-project, merge the template's master branch:
git pull template master

複雑なことは何もありません。必要な変更を加えてブランチをマージするだけです。これはおそらく明らかですが、ローカル プロジェクトからテンプレートに逆方向に引っ張らないようにしてください。

そしてもちろん、必要に応じてリモコンをいじります。おそらく、 の新しい「オリジン」を作成し、local-projectその中央 (例: github-hosted) リポジトリを指し、template. local-project必要に応じて、テンプレートのローカル クローンではなく、中央のテンプレート リポジトリをリモートでポイントすることもできます。

于 2011-03-30T23:25:39.503 に答える