6

を使用git filter-branch --subdirectory-filterすると、サブディレクトリを現在のリポジトリから独自のリポジトリに変換できます。ただし、私がやりたいことは反対のことです。現在のリポジトリの完全なコンテンツをサブディレクトリとして含むリポジトリを作成し、常にそのサブディレクトリにあるかのように完全な履歴を保持します。そのディレクトリをリポジトリの完全に不可欠な部分にしたいので、サブモジュールを使用したくありません。


背景: 私は単純なスクリプトを作成する任務を負っていましたが、タスクの範囲が拡大されたため、そのスクリプトはより大きなプロジェクトの単なるサブディレクトリになりました。また、それ自体で生活する意味がないため、サブモジュールのないソリューションが推奨されます。

4

3 に答える 3

9

最も簡単な解決策は、履歴をそのままにしておくことです。git mvすべてのファイルをサブディレクトリに入れ、その変更をコミットして、自分の人生を続けてください。

この作業をずっとサブディレクトリで行ったかのように本当にふりをしたい場合は、次のようなものを使用するのが最も簡単な方法です。

git filter-branch --tree-filter "mkdir SUBDIR && bash -c 'git mv -k {,.[!.],..[!.]}* SUBDIR/'"

SUBDIR をターゲット サブディレクトリの名前に置き換えます。

于 2012-11-12T03:34:35.473 に答える
1

サブプロジェクト リポジトリ内のファイルを、より大きなリポジトリ内に配置したいディレクトリに移動し、それらのコミットを最終的なリポジトリにマージすることができます。これにより、すべてのコミット ID を含む両方のリポジトリの履歴が完全に保存されます。

これは、次のようなコマンドで実行できます。

cd /path/to/subproject
mkdir subproject_dir
git mv file1 dir2 dir3... subproject_dir
git commit
cd /path/to/main_project
git pull /path/to/subproject
于 2012-11-12T03:36:25.343 に答える
1

コマンドを使用しgit subtreeます。新しいレポがあると仮定します。

$ cd $ROOT_OF_NEW_REPO
$ git subtree add --prefix=subdirectory/for/old/repo <old git repo URL or checkout> <commit ref>

例えば。

$ git subtree add --prefix=history ~/repos/oldrepo HEAD

ディレクトリには、すべての履歴とともに、コミット時のhistoryoldrepo ファイルが含まれます。HEAD

于 2017-01-10T04:02:21.930 に答える