私は、次のワークフローを持っているしたいプロジェクトに取り組んでいるのマージある時点で、私たちはプロジェクトの状態に満足しており、内部のレビューを行い、新しいコードをGithub(repo "Beta")にプッシュしたいと考えています。一つのプロジェクト、複数のGitのレポは問題
私たちはまったく新しいgitに慣れていて、成功することなくいくつかの方法を試しています。欲求不満の状態で、私たちはベータをクローンし、.git dirのコピーを除くすべてのファイルをrepo Alpha(.git dirを除く)のファイル形式で吹き飛ばし、コミット-a、プッシュ、成功を宣言し、良い方法がなければならないという悪い気持ちで。だから、ここで
は「gitの」を使用してそれを行うには、当社の最新の取り組みの「ログ」です:私たちは何ができる
~ $ mkdir work
~ $ cd work
~ $ # create the clone of Beta
~ $ git clone https://github.com/foo/xot.git
~ $ # create the clone of Alpha
~ $ git clone [email protected]:xot/XOT.git
~ $ ls
xot/ XOT/
~ $ # go work in the clone of Beta
~ $ cd xot
~/xot $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
~/xot $ git remote add Internal ../XOT
~/xot $ git remote -v
Internal ../XOT (fetch)
Internal ../XOT (push)
origin https://github.com/foo/xot.git (fetch)
origin https://github.com/foo/xot.git (push)
~/xot $ git pull Internal master
<boom>
1000's of conflicts
確か
レポアルファ=内部のgitラボ レポベータ=外部githubのプロジェクト「git mergetool」と呼ばれ、何千もの紛争のそれぞれに「はい、そのファイルを削除する」と「はい、内部レポのバージョンを取る」と言って老齢で死ぬ。
ここで私たちがやろうとしているもののグラフ表現です:私についてのキャスティング
commits
Repo Alpha a12f -----> c676 -----> .... ----> d4a2
now we want to apply all the commits to repo Beta:
Repo Beta a12f ----------------------------> d4a2
は、可能な自動マージ戦略として「gitのプルは彼らを-s」への参照(https://git-scm.com/docs/git-merge/2.14.2)を見ました。 gitエラーを除いて、それらが有効な戦略ではないことを伝えてください(私はUbuntu 14.04でgit 2.14.2を実行しています)
ここでは何が欠けていますか?これを行うための適切な方法がありますか?
それは同じプロジェクトだ場合、あなただけ変更することができます ' ' gitのリモート設定、URLのオリジンHTTPSをやってorigin':// github.com/fooの/ xot.git' 。 これは、同じプロジェクトで別のリポジトリを使用して作業し、履歴を保持する適切な方法ですが、対処する必要があります。 –
はい、これは1回限りのイベントではありません。 Github Repoに別の「リリース」を押し上げるたびに、100秒または1000秒の競合を処理することは望ましくありません。ベータ版のすべてのファイルを削除し、Alphaからファイルをコピーしてコミットしなければならないと思います。単にgitの力を利用するより良い方法を望んでいた。 – Todd
私はあなたでしたが、すべてのファイルを削除してすべてのファイルをコピーする必要があるのは、repo aからコードをチェックアウトし、repo bのすべてのファイルを削除してからrepo aをすべてコピーしてからコミットするスクリプトあなたのためにgitする。この方法では、変更するときに手作業を行う必要はなく、簡単な小さな作業になります。 –