3

hg-fast-exportツールを使用していくつかのMercurialリポジトリをgitに変換しましたが、すべて正常に変換されましたが、リポジトリをプッシュすると次のエラーが発生しました。

$ git remote add origin git@github.com:asdf/zxcv.git
$ git push -u origin master
Counting objects: 7840, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2817/2817), done.
error: object 324f9ca2aaae7b1d716db3fc31c02d391c1c2c16:contains '.git'
fatal: Error in object
error: pack-objects died of signal 13
error: failed to push some refs to 'git@github.com:asdf/zxcv.git'

「contains'.git'」エラーには非常に広い用語があり、ドキュメントが見つからなかったため、元のリポジトリで既存の'.git'フォルダーを検索しようとしました。git rmで削除した古いgitリポジトリのインスタンスを含むサブサブサブフォルダがありましたが、問題は残りました。

とにかくこれをgithubにプッシュできますか、それとも新しいクリーンなリポジトリが唯一のオプションですか?

これでどんな助けでもありがたいです。ありがとう!

4

2 に答える 2

5

convertこのコマンドをファイルマップとともに使用して、リポジトリからgitリポジトリを削除できます。その後、履歴から削除され、リポジトリはgitに安全にインポートできるようになります。

例:

$ echo "exclude path/to/.git" > my-filemap
$ hg convert --filemap my-filemap originalrepo newrepo

convertこれはバンドルされた拡張機能であり、最初に有効にする必要があることに注意してください.hgrc

[extensions]
convert =

詳細については、を参照してくださいhg help convert

于 2013-02-06T15:15:53.223 に答える
0

プッシュしようとしている.gitチェンジセットは、最新のチェンジセットに含まれていなくても履歴に含まれているため、クリーンなリポジトリを作成する必要があると思います。

ただし、別の方法として、一部のチェンジセットをリベースすることもできます。プッシュしたいものを提供すると、無関係な.gitものが追加される前のチェンジセットがあり、履歴の詳細を少し失ってもかまいません。それらを1つのチェンジセットにリベースして、プッシュしてみてください。理論的には(!!)、.gitディレクトリは履歴から効果的に「編集」されます。

次に例を示します(注:私はMercurialほどgitを使用していないので、これが機能するかどうか、または私のコマンドが有効かどうかはわかりませんが、出発点になる可能性があります):

$ git log --oneline  
1234567 More changes
abcdefa made changes
a5b6482 Added .git sub-sub-sub-directory to repo!
dead123 More things

$ git rm sub-sub-sub/.git
$ git commit -m "Removed .git sub-sub-sub-directory"
$ git log --oneline  
beef456 Removed .git sub-sub-sub-directory
1234567 More changes
abcdefa made changes
a5b6482 Added .git sub-sub-sub-directory to repo!
dead123 More things

$ git rebase -i HEAD~4
... at this point you need to interactively specify what to do*
$ git log --oneline  
eeee987 Some new commit message that sums up the changes
dead123 More things

これを試してみると、「押しつぶされる」チェンジセットのリストがエディターに表示されました。これは、これまでに見たすべてのチュートリアルとは異なります。追加と削除のファイルの競合が原因だと思います。4つのチェンジセットのうち3つのコマンドを、「pick」ではなく「squash」に変更しました。これにより、rebase-mergeは、そのチェンジセットを親に押しつぶすように指示されます。私は基本的にすべてのチェンジセットを1つに押しつぶしました。それは私にとってはうまくいったようです、残りのチェンジセットのどれも削除されたファイルを持っていません。それでプッシュできるかどうかはわかりません。

もちろん、最初にクローンか何かでこれを試してください。

于 2013-02-06T14:09:20.457 に答える