5

サブディレクトリ「A/mySubDir」を持つレポ「A」があり、「A/mySubDir」を新しいレポ「B」に分離したいとします。

git init B
cd <repo A>
git subtree split --prefix==A/mySubDir --branch=split
git push 'B' split:master

レポ 'A' の HEAD が現在 12fe にあるとします。「A/mySubDir」のいくつかのファイルを更新します。

「A/mySubDir」内のファイルが変更されたときに、「B」を最新の状態に保つにはどうすればよいですか?

git subtree split --prefix==A/mySubDir --branch=split 12fe..

次のエラーで終了します: Branch 'split' is not an anchesor of commit 'XXXX'

誰かがそれに接着剤を持っていますか。

よろしく、ゲルト

4

1 に答える 1

5

最初のステップ (リポジトリの分割) は完了しましたが、「リポジトリの分離に Git サブツリーを使用する」で説明されているように、リポジトリを A に戻しAていません。B

あなたのA/mySubDir - B状況に合わせた抜粋を次に示します。

メイン リポジトリのサブツリーとしてリポジトリを追加する

メイン リポジトリでは、分割した元のファイルを削除し、代わりにリモート リポジトリをサブツリーとして追加する必要があります。

分割したディレクトリ全体を削除してから、コミットします。

git rm -r A/muSubdir
git commit -am "Remove split code."

新しい共有リポジトリをリモートとして追加します

git remote add B /url/to/B.git

リモートリポジトリをサブツリーとして追加します

git subtree add --prefix=A/mySubDir --squash shared master

注: スイッチを使用するのは、アップストリームの偽のバグ修正コミットで自分のコミット履歴を複雑にするのではなく、共有モジュールの-–squashバージョンを表す単一のスナップショット コミットが必要なためです。Xもちろん、履歴全体が必要な場合は、そのスイッチをオフのままにしておいてください。

アップストリーム リポジトリに基づくサブツリーが作成されました。良い。

http://makingsoftware.files.wordpress.com/2013/02/gitsubtreeadd_thumb.png?w=500&h=196

画像では、一番下のコミットがすべてのアップストリーム コードを含む圧縮されたコミットであり、これがコードとマージされていることがわかります。

重要な注意:この をリベースしようとしないでください。そのまま押す。
リベースすると、次のsubtree pull.

ここまでは順調ですね。しかし、上流のリポジトリから変更を受け取ることができない場合、これはあまり役に立ちません。幸いなことに、それは簡単です。

アップストリームの変更をプルする

アップストリーム リポジトリから変更をプルするには、次のコマンドを使用します。

git subtree pull --prefix=A/mySubDir --squash shared master

(すべての新しいアップストリーム コミットを単一のコミットに押しつぶし、リポジトリにマージします)。
重要:前述のとおり、これらのコミットをリベースしないでください

アップストリーム リポジトリへの変更のプッシュ

アップストリーム リポジトリへの変更の提供は、次のように簡単です。

git subtree push --prefix=A/mySubDir --squash shared master
于 2013-11-09T10:10:05.197 に答える