私は以下のようにGitサブツリーを使用します:
git subtree add --prefix=directory_destination_path --squash [email protected]:kicaj/projectname.git master
しかし、パス内:directory_destination_path
projectname.git
からすべてのリポジトリをコピーします
directory_destination_path
のみのサブディレクトリ、またはprojectname.git
から一部のファイルのみにコピーする方法は?
編集:
もう1つの質問:
両方のリポジトリで(自動)ファイルの変更を更新する方法は同じでしたか?可能です?
私が理解しているなら、あなたは別のリポジトリの特定のディレクトリにのみマージしたいと思っているようで、それをリポジトリのサブツリーにしたいのです。 project.gitの対象のディレクトリをpath_of_interest_in_project
と呼び、リポジトリの宛先をdirectory_desination_path
と呼びます。
リモートproject.gitをリモートとして追加してから、そのブランチの1つをローカルでチェックアウトしてみてください。次に、git-subtree split
を使用して、関心のあるproject.gitのディレクトリのみを分割します。その後、サブツリーマージを使用してリポジトリにマージします。
git remote add project [email protected]:kicaj/projectname.git
git branch project_master project/master
ブランチproject_masterは、project.gitリポジトリの履歴全体を保存する必要があります。
次に、git-subtrees-split
プロセスを使用する必要があります。
git checkout -f project_master
git subtree split --squash --prefix=path_of_interest_in_project -b temp_branch
これで、関心のあるディレクトリだけを含むtemp_branch
というブランチができました。これで、git-subtree-merge
を実行して、すべてをリポジトリに取り込むことができます。
git checkout -f master
git subtree merge --allow-unrelated-histories --prefix=directory_destination_path temp_branch
これは、temp_branchでマスターブランチにマージする必要があります。
参照master
にoctocatgitリポジトリのimages/
プレフィックスを追加したいとします。
https://github.com/octocat/octocat.github.io.git でホストされているリモートを使用するとします(注:GitHubは次のfetch
コマンドでerror: Server does not allow request for unadvertised object
を返します。名前付きrefに関連付けられていないsha1を指定します)
サブツリーを追加するブランチから始めて、最初に目的のコミット履歴をフェッチして、新しいブランチをチェックアウトしましょう。
git fetch https://github.com/octocat/octocat.github.io.git master:tmp_octocat_master
git checkout tmp_octocat_master
次に、目的のプレフィックス(images/
)の下にあるファイルのみが存在する新しい履歴を作成しましょう。
git subtree split --prefix=images -b subtree_split_branch
最後に、このサブツリーを目的のブランチ(おそらく、最後に使用していたブランチ、git checkout -
)に追加しましょう。
git checkout -
git subtree add --prefix=public/images subtree_split_branch
これで、現在のブランチに必要なすべてのファイルがあり、完全なgit履歴があります。
サブツリー内のコミットを1つのコミットにまとめたい場合があります。これは、サブツリーを追加する目的をある程度無効にしますが、その場所はあります。以下は、リポジトリに取り込まれる履歴を制限するための上記のバリエーションです。
サブツリーを追加するブランチから開始します。
git fetch --depth=1 https://github.com/octocat/octocat.github.io.git master:tmp_octocat_master
git checkout tmp_octocat_master
注:--depth=1
は次の--squash
コマンドを使用しているため、上記ではgit subtree split
を指定しています。
git subtree split --squash --prefix=images -b subtree_split_branch
git checkout -
git subtree add --prefix=public/images subtree_split_branch