6

CVSからソースと履歴をインポートして作成された既存のベアのGitリポジトリがあります。私は以下を使用して鏡を作ります:

git clone --mirror git://aserver.adomain.com/myrepo

次に、すべてのブランチとタグを内部のGitリポジトリホストにプッシュします。しかし、プッシュはベアリポジトリをGitリポジトリとして認識していないようです

私は以下を試しました:

git clone --mirror git://aserver.adomain.com/myrepo
git remote set-url origin http://user@anotherserver.adomain.com/project/myrepo.git
git push origin

その結果:

$ git push origin
Password for 'xxxx':
error: cannot spawn git: No such file or directory

または私は試します:

$ git remote rm origin
Note: Some branches outside the refs/remotes/ hierarchy were not removed;
to delete them, use:
  ...a whole lot of branches...

user@SOMEMACHINE /some/path/myrepo.git (BARE:master)
$ ls
HEAD  config  description  hooks  info  objects  packed-refs  refs

user@SOMEMACHINE /some/path/myrepo.git (BARE:master)
$ git branch -a
  ...a whole lot of local branches...

user@SOMEMACHINE /some/path/myrepo.git (BARE:master)
$ git remote add mygithost http://user@anotherserver.adomain.com/project/myrepo.git

user@SOMEMACHINE /some/path/myrepo.git (BARE:master)
$ git push --all mygithost
Password for 'xxxx':
error: cannot spawn git: No such file or directory

「gitをスポーンできない」とはどういう意味ですか?

すべてのブランチを含むベアリポジトリを空の既存のリポジトリにプッシュするにはどうすればよいですか?

私はいくつかの可能性をグーグルで検索し、いくつかのSOの問題を確認しましたが、この問題の解決策が見つかりません。明らかに、このプロセスについての私の理解には欠陥があります。

アップデート

私の理解に欠陥はなかったと思います。このエラーは、「通常の」クローンからブランチごとにクローンを作成してプッシュできるため、ベアリポジトリに何か問題があると誤解しました。

結局のところ、これはMSysGitのバグです。私の場合、すべての履歴を保持することが要件だったため、Linuxに移行しました。空のリモートリポジトリにプッシュする必要があるため、ブランチとタグを単純に削除することはできませんでした。したがって、以下が機能しました。

$ git remote rm origin
$ git clone --mirror git://aserver.adomain.com/myrepo
$ cd /some/path/myrepo.git
$ git remote add mygithost http://user@anotherserver.adomain.com/project/myrepo.git
$ git push --all mygithost
$ git push --tags mygithost
4

4 に答える 4

8

このコメントが解決策につながったので (質問の最後の編集を参照)、ここで回答として再投稿します。

MSysGit を使用していますか? これは、多数のタグがある場合に発生することが知られています。この投稿を参照してください。

于 2013-02-20T22:28:00.657 に答える
1

この投稿によると、根底にある問題は、パスにスペースが含まれるディレクトリにインストールすると、git が誤動作することです。これは、エラーが発生した環境と報告されたエラー メッセージと一致しています。

git がもともと Linux の作者によって書かれたものであることを考えると、この動作は当然のことだと思います。典型的な回避策は、パス名のスペースに敵対的なオペレーティング システムを使用することです。

于 2015-02-05T18:51:26.823 に答える
1

Windowsでgitを使用する場合、多数のタグが原因でこの問題も発生します。タグの数が 500 を少し下回るまで、いくつかのタグを一度に 1 つずつプッシュするバッチ スクリプトを作成することで解決しましたgit push

したがって、メモ帳を開いて、git push origin <yourtagname>プッシュするタグごとに 1 行に 1 つずつ書き込み、git リポジトリ フォルダーに blabla.bat として保存して実行するだけです。タグ フォルダからすべてのファイル名をコピーし、.git\refs\tags置換マジックを実行してgit push origin各ファイル名の前に追加すると、さらに簡単になります。

于 2015-10-15T13:25:03.620 に答える