後でリポジトリに何を残したいかによって異なります。
v1.0
、 、の3 つのブランチが必要な場合v2.0
はv3.5
、すべて次のような構造になります。
/root
/lib
/tools
/src
はい、私はあなたがそれを行うことができると確信しています。ブランチ構造に関しては、次のような結果になります。
-- A -- B -- Current
|
|--- v1.0
|--- v2.0
|--- v3.5
A
, B
,Current
は git に移行してからコミットしたコミットであり、ここでv1.0
,v2.0
とv3.5
は本質的に「行き止まり」のブランチです。次のようなブランチ構造を取得したい場合は、いくつかの凝ったことを行うことができます。
-- v1.0 --- v2.0 --- v3.5 -- A -- B -- Current
つまりv1.0
、 、v2.0
、およびv3.5
を独自のブランチに分離し、現在のバージョンの最初のコミットに 、 、およびにリベースv1.0
します。v2.0
v2.0
v3.5
v3.5
しかし、あなたが何をしたいのか正確にはわかりません。
各バージョンのディレクトリを保持する代わりに、src サブディレクトリ内の 3 つのバージョンを別々のブランチに分ける方法はありますか?
はい、私はあなたがこれを行うことができると確信しています。私の方法論は少し...複雑です、認めますが、ここに行きます。注意してマニュアルページを読んでください。次のコマンドはおそらくすべてを台無しにするわけではありませんが、自己責任で使用してください。
git checkout -b v1.0
- 新しいブランチに入る。
以外のすべてを削除しますv1.0
。これを行うにはいくつかの方法があります。この質問には、 ; を除くすべてを削除する方法がいくつかあります。私はそれらを私のために働かせることができませんでした、それはあなたにとってよりうまくいくかもしれません.
`git filter-branch --index-filter "git rm -r -f --cached --ignore-unmatch src/v2.0" --prune-empty -f`
src/v2.0
これにより、関連するすべての履歴がブランチから削除されます。-f
このフィルターには必要ありません。しかしgit-filter-branch
、ある種のバックアップを行い (man ページを読んでください)、エラーを吐き出す可能性があります。2回目に挑戦するのは挑戦的ですgit filter-branch
。
これを繰り返して、同様に削除src/v3.5
します。
これにより、 が残りますsrc/v1.0
。src/v1.0
ソースを からにシフトしたい場合がありsrc
ます。git filter-branch --subdirectory-filter
(man ページを読む) を実行してディレクトリ構造を取得し(/v1.0-files
サブディレクトリ のファイルのみが含まれていますv1.0
。コンテンツを からv1.0
に移動しましたroot
)、man git-filter-branch
ページ内の例 (具体的には一番下の例) を見て、ファイルを移動します。サブディレクトリに。それはやり過ぎかもしれません。そして、それを、選別された他のすべてのものを含むブランチにマージするgit filter-branch --subdirectory
必要があります。単純なmv v1.0/* .
方法でうまくいくかもしれませんが、履歴に別のコミットができてしまいます。私はあなたが何を好むかわかりません。
これv1.0
で、独自のブランチを作成できました。わーい!
v2.0
とについて繰り返しv3.5
ます。
残念ながら、これがあなたに何かを与えているのを見ることはできません...「奇妙な」歴史ですが。おそらくv2.0
、本質的にv1.0
+ 改善があります。私が上にリストした構造 (3 つの「行き止まり」の分岐) は、以前のバージョンを示してv2.0
おりv3.5
、構築していません。これが問題であるかどうかなど、あなたがどのような歴史を持っているかは完全にはわかりません.
v1.0
、v2.0
およびv3.5
独自の小さなブランチを持っているため、見栄えの良い履歴が必要な場合は、git merge
それらなどを実行できます。git rebase
うまくいけば、これで少し考えることができます。私が言ったように、マニュアルページを読んでください。:)