2017-11-01 13 views
1

私は、次のワークフローを持っているしたいプロジェクトに取り組んでいるのマージある時点で、私たちはプロジェクトの状態に満足しており、内部のレビューを行い、新しいコードを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を実行しています)

ここでは何が欠けていますか?これを行うための適切な方法がありますか?

+0

それは同じプロジェクトだ場合、あなただけ変更することができます ' ' gitのリモート設定、URLのオリジンHTTPSをやってorigin':// github.com/fooの/ xot.git' 。 これは、同じプロジェクトで別のリポジトリを使用して作業し、履歴を保持する適切な方法ですが、対処する必要があります。 –

+0

はい、これは1回限りのイベントではありません。 Github Repoに別の「リリース」を押し上げるたびに、100秒または1000秒の競合を処理することは望ましくありません。ベータ版のすべてのファイルを削除し、Alphaからファイルをコピーしてコミットしなければならないと思います。単にgitの力を利用するより良い方法を望んでいた。 – Todd

+0

私はあなたでしたが、すべてのファイルを削除してすべてのファイルをコピーする必要があるのは、repo aからコードをチェックアウトし、repo bのすべてのファイルを削除してからrepo aをすべてコピーしてからコミットするスクリプトあなたのためにgitする。この方法では、変更するときに手作業を行う必要はなく、簡単な小さな作業になります。 –

答えて

0

あなたがする必要があるのは、Repo Alphaを作成することです。変更を加えたい人は、レポをフォークする必要があります。彼らが変更をマージしたいとき、彼らはちょうど彼らのフォークからアルファにプルリクエストをする必要があります(ベータ版)。

https://help.github.com/articles/fork-a-repo/

https://help.github.com/articles/about-pull-requests/

+0

Alphaは既に存在します。私たちは毎日、分岐、コミット、マージなどを使用しています。私たちはそれに慣れており、うまくいきます。問題は、「どのようにして現状を第2のレポ(ベータ版)に押しつけるのか?しかし、私はあなたのコメントを誤解しているように感じる。あなたは "ベータ"をフォークし、要求を引き出す必要があると言っていますか? – Todd

+0

あなたはフォークアルファを必要とします。これは、その人のgithubアカウントに添付された元のレポのクローンを作成するものです。彼らはその後、自分の支店などを作ることができますし、彼らはメインリポジトリに貢献する何かを持っているときにプルリクエストを行うことができます。レポから元のレポからブランチにブランチをマージします。 @Todd –

+0

アルファはgitlabのレポで、ベータはgithubのレポです。私はフォークの概念を理解していますが、アルファで行っていた変更をBetaにプッシュする方法を見逃しています。質問をダイアグラムで更新します。 – Todd

関連する問題