[解決済み] ある git リポジトリから別の git リポジトリ(クローンではない)へ、履歴を保持しながらファイルを移動する方法
質問
私たちの Git リポジトリは、最初は一つのモンスター SVN リポジトリの一部で、個々のプロジェクトがそれぞれこのようなツリーを持っていました。
project1/branches
/tags
/trunk
project2/branches
/tags
/trunk
明らかに、ファイルを移動するのはかなり簡単で
svn mv
. しかし、Gitでは、各プロジェクトは独自のリポジトリにあり、今日、私はサブディレクトリを
project2
から
project1
. こんな感じでやってました。
$ git clone project2
$ cd project2
$ git filter-branch --subdirectory-filter deeply/buried/java/source/directory/A -- --all
$ git remote rm origin # so I don't accidentally overwrite the repo ;-)
$ mkdir -p deeply/buried/different/java/source/directory/B
$ for f in *.java; do
> git mv $f deeply/buried/different/java/source/directory/B
> done
$ git commit -m "moved files to new subdirectory"
$ cd ..
$
$ git clone project1
$ cd project1
$ git remote add p2 ../project2
$ git fetch p2
$ git branch p2 remotes/p2/master
$ git merge p2 # --allow-unrelated-histories for git 2.9+
$ git remote rm p2
$ git push
しかし、それはかなり複雑なようです。一般的にこのようなことをするのに良い方法はあるのでしょうか?それとも、私は正しい方法を採用しているのでしょうか?
これは、単に他のリポジトリの一部から新しいスタンドアロンリポジトリを作成するのではなく、既存のリポジトリに履歴をマージすることになることに注意してください ( 以前の質問のように ).
どのように解決するのですか?
をクリックすると
--subdirectory-filter
の
filter-branch
がポイントでした。あなたがそれを使ったということは、本質的にもっと簡単な方法がないことを証明しています。あなたは(名前を変えた)ファイルのサブセットだけで終わらせたかったので、歴史を書き換えるしかなかったのですが、これは定義上ハッシュを変更することになります。標準的なコマンドはどれも(たとえば
pull
のように、履歴を書き換えてしまうので、これを達成するために使うことはできません。
もちろん、細部を改良することは可能です。クローンやブランチの一部は厳密には必要ではありませんでしたが、全体的なアプローチは優れています! しかし、全体的なアプローチは良いものです!複雑なのは残念ですが、もちろん、gitのポイントは履歴を簡単に書き換えることではありません。
関連
-
[解決済み] git でディレクトリ階層が異なる 2 つのブランチをマージするには?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] ローカルの Git リポジトリが元々クローンされた URL を特定するにはどうすればよいですか。
-
[解決済み] Git ですべてのリモートブランチをクローンする方法
-
[解決済み] Gitで変更された複数のファイルのうち、1つのファイルだけを隠す?
-
[解決済み] Git リポジトリを特定のフォルダにクローンする方法は?
-
[解決済み] サブモジュールを含む "git clone "の方法は?
-
[解決済み] Git のコミットからファイルを削除する
-
[解決済み] Git リポジトリのサブディレクトリのみをクローンする方法を教えてください。
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ERROR: Error cloning remote repo 'origin'.
-
[解決済み】ローカルに変更があるにもかかわらず、git pushが「すべて最新」と言う
-
[解決済み] [Solved] 作業ツリーのディレクトリ 'example.com' を作成できませんでした。パーミッションが拒否されました
-
gitアップロードの共通エラー処理
-
[解決済み] VSTS Git Fetch Failed with exit code: 128
-
[解決済み] git status に fatal: bad object HEAD と表示される。
-
[解決済み] Gitのエラー「object file ... is empty」はどうすれば直せますか?
-
[解決済み] サブディレクトリを別のGitリポジトリに切り離す(移動する)。
-
[解決済み】Gitリポジトリの内容を履歴を保持したまま別のリポジトリに移動したい
-
[解決済み] Git フォルダをサブモジュールに遡及的に変換する?