フォルダからサブモジュールのリポジトリを作成し、そのgitコミット履歴を保持する
私は、ある特定の方法で他のウェブアプリケーションを探索するウェブアプリケーションを持っています。それは demos
フォルダにいくつかのウェブデモを含んでおり、デモの1つは現在それ自身のリポジトリを持っているはずです。このデモアプリケーション用に別のリポジトリを作成し、コミット履歴を失うことなく、メインリポジトリから subpackage submodule にしたいと思います。
*リポジトリ'フォルダ内のファイルからコミット履歴を保持し、そこからリポジトリを作成し、代わりにsubmoduleとして使用することは可能でしょうか?
98
3
詳細な解決策
次の回答では、リポジトリからフォルダを抽出して、そこからgitリポジトリを作成し、フォルダの代わりに[サブモジュール][3]としてインクルードする方法を知っていることになります。
Gerg Bayer's の記事 [Moving Files from one Git Repository to Another, Preserving History][1] からインスパイアされました。
最初はこのようなものです。
git clone cd git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch -r' --prune-empty --tag-name-filter cat -- --all
git push origin master --force
git submodule add git submodule update git commit
git push origin master
GabLeRoux による解決策は、ブランチとそれに関連するコミットを潰しています。
余分なブランチやコミットをすべてクローンして保持するシンプルな方法です。
1 - この git エイリアスがあることを確認します。
2 - リモートをクローンし、すべてのブランチをプルし、リモートを変更し、ディレクトリをフィルタリングし、プッシュします。
GabLeRoux'の解決策は、
git lfs
を使用していて、切り離したいディレクトリの下に大きなファイルがある場合以外はうまくいきます。この場合、ステップ3の後に、すべての大きなファイルが実際のファイルではなくポインターファイルとして残ります。おそらく、フィルターブランチの過程で.gitattributes
ファイルが削除されたことが原因だと思います。このことに気づいて、私は以下の解決策を見つけました。
git lfs が大きなファイルを追跡するために使用する
.gitattributes
を.git/
ディレクトリにコピーして、削除されないようにする。フィルターブランチが完了したら、新しいリポジトリでも git lfs を使用したい場合は
.gitattributes
を元に戻すのを忘れないようにしてください。