15

Gitのサブツリーコマンドを使用して、いくつかのライブラリをプロジェクトにプルしています。

その後、通常の方法でプロジェクトのクローンを作成すると、必要なすべてのコードが作成されますが、サブツリーの関係が失われます。クローンには、各ライブラリのリモートがなく、の-pushブランチもありません。それらのいずれか。

この接続を再確立するための最良の方法は何ですか?

するだけで十分ですか

git remote add <lib> <remote-url>
git fetch <lib>

ライブラリを初めて追加する場合は、次のようにします。

git subtree add -P <local/lib> --squash "<lib>/master"

ただし、ローカルディレクトリがすでに存在する場合は機能しません。もちろん、ライブラリがすでに追加されているプロジェクトのクローンを作成した場合は機能します。

この状況で、後続のgitsubtreemergeおよびgitsubtreesplitコマンドを期待どおりに確実に実行するために他にすべきことはありますか?

4

3 に答える 3

9

私は非常によく似た問題を抱えていました

最初にサブツリーを作成した方法は次のとおりです

git remote add -f sub_project url_to_remote_repository/project.git
git merge -s ours --no-commit sub_project/master
git read-tree --prefix=sub/project/ -u sub_project/master
git commit -m "Added subtree merged in sub/project"

「プロジェクト」レポから変更を取得するために、私はやっていました

git pull -s subtree sub_project master

ここで、ローカル リポジトリを github にプッシュし、別のマシンから github リポジトリのクローンを作成しました。その時点で、予想されるすべてのファイルを sub/project に取得しました。しかし、リモートではなく、サブ/プロジェクトとの関係。だから私は次のことをしました

git remote add -f sub_project url_to_remote_repository/project.git
git merge -s ours --no-commit --squash sub_project/master
git pull -s subtree sub_project master

そして、それはうまくいきました。以前と同じように、その複製されたリポジトリからサブツリーを管理できるようになりました

git pull -s subtree sub_project master

ノート:

1) 私たちのプロジェクトでは、ユーザーにとって本当に良くない git サブモジュールを使用する前でした。そのため、 git のサブツリー システムに切り替えました。
2) Windows マシンで (git バージョン 1.7.9.msysgit.0 を使用して) これらの操作を実行すると奇妙なエラーが発生し、Linux でも同じ操作が正常に行われました。そのため、サブツリーを操作するために、私はよく Linux を使用します (エラーが発生した場合は、Linux でも同じことを試します)。

これが役立つことを願っています。

于 2012-07-02T15:37:36.387 に答える
4

私が過去にその関係を再作成した方法は、サブツリーのマージを行うことでした。

git pull -s subtree <lib> master

マージ/プルするものがない場合でも、何もせずに単に戻る必要があります。--squashリモート履歴をプルしないように、上記のプルに自由に追加してください。

于 2011-06-23T19:57:42.427 に答える
1

プロジェクトをサブモジュールの使用からサブツリーへの移行中にこの質問に出くわし、最終的にどちらも使用しませんでした (とにかく、少なくとも直接ではありません) - 私は現在git-subrepoツールを使用しています。

各サブツリーのルートに .gitrepo ファイルを追加することで、この問題を解決します。.gitrepo ファイルには、リモート URL を含む追跡情報が含まれており、その後のクローンに含まれます。これにより作業が大幅に簡素化され、唯一の複雑な点は、git-subrepo を各開発マシンに個別にインストールする必要があることです (ただし、リポジトリはそれがなくても使用できます)。

于 2017-03-31T01:32:47.110 に答える