9

私の質問Git subtree export and re-import woesに続いて、フォルダーをサブツリーに変換する方法を尋ねたかったのです。

別のプロジェクト (およびおそらくそれ以上) と共有する必要があるコードがあるリポジトリ A があると想像してください。したがって、すべての共有コードをフォルダー "sub" に配置します。このフォルダは、ベア リポジトリ C に (可能であれば履歴なしで) 抽出する必要があります。また、「サブ」で変更を加えて、これらを C にプッシュできるようにしたいと考えています。

4

1 に答える 1

11

git subtree splitまさにそれを行います。それを介し--prefixてフォルダーを指定すると、リポジトリ内に別のツリーが生成され、それを別のリポジトリにプッシュして、必要に応じて使用できます。

現在のバージョンの git (1.8.1) にはサブツリーのドキュメントは含まれていませんが、 https ://github.com/apenwarr/git-subtree/blob/master/git-subtree.txt で見つけることができます。

使用できるフローは次のとおりです。

# In Repo A create your subtree split and push it
> git subtree split --prefix sub --branch subBranch
> git push C subBranch:master

# After some changes that touched the sub directory
> git subtree push --prefix sub C master

最後のコマンドは、ツリーを再分割し (以前に分割されたコミットを使用して、C のツリーの整合性を維持します)、それを にプッシュしC/masterます。

プッシュされたコンテンツの履歴を削除する場合は、 -ing および-ing のときにオプションCを使用できます。圧縮されたコンテンツ サブツリーと圧縮されていないコンテンツ サブツリーを混在させ始めると、以前の分割を適切に分割して再利用できなくなり、それを にプッシュできなくなるため、一貫性を保ち、それを引き続き使用する必要があります。--squashgit splitgit pushC

最後に、最初の分割を作成したら、subそれを削除して新しいサブツリーとして再インポートする必要はまったくありません。保持するgit subtreeと、他の分割から以前に作成されたコミットが再生成/再利用されます。subフォルダーを削除してから、作成されたコミットから再度追加しても機能するはずです。使用している場合は、履歴を持たずに履歴を保持することで、--squash必要なものと一致します)。CA

于 2013-01-22T08:44:16.690 に答える