5

Perforce リポジトリにミラーリングしたい git リポジトリがあります。私は git-p4 スクリプト (非推奨の警告を出さない最新バージョン) をダウンロードし、それを使って作業しています。Perforce から変更をプルする方法を理解しましたが、git リポジトリから変更を同期しようとするとエラーが発生します。これまでに行ったことは次のとおりです。

git clone git@github.com:asdf/qwerty.git
git-p4 sync //depot/path/to/querty
git merge remotes/p4/master     (there was a single README file...)

そのため、オリジンをクリーンな新しいディレクターにコピーし、見栄えの良いマージされたファイルのツリーを取得し、git status最新であることを示しました。しかし:

> git-p4 submit
fatal: Not a valid object name HEAD~261
Command failed: git cat-file commit HEAD~261

git メーリング リストのこのスレッドは関連しているようですが、A、B、および C のすべてで何をしているのかわかりません。誰かが「有効なオブジェクト名ではありません」の意味と、問題を解決するために何ができるかを明確にしてもらえますか? 私がやりたいことは、オリジン/マスターを Perforce に定期的にスナップショットすることだけです。完全な履歴は必要ありません。ありがとう。

4

2 に答える 2

1

9 年後、その問題は Git 2.23 (2019 年第 3 四半期) で解消される可能性があります

Mike Mueller ( )によるcommit c3f2358 (2019 年 5 月 28 日)を参照してください。( 2019 年 6 月 17 日コミット add59c4Junio C Hamanoによってマージされました)mdymike
gitster

p4 unshelveNot a valid object name HEAD0: Windows で" " を修正

git p4 unshelve次のエラーで失敗していました:

fatal: Not a valid object name HEAD0
Command failed: git cat-file commit HEAD^0

(git version 2.21.0.windows.1, python 2.7.16)

コマンドを呼び出すためにpOpenによって使用される呼び出しは、最初の引数として文字列または配列のいずれかを取ることができます。 プラットフォーム固有の特殊文字のエスケープが自動的に処理されるため、配列形式が推奨されます( https://docs.python.org/2/library/subprocess.html ) 。 Windows で 0 引数のキャレット ( ) 文字がエスケープされていませんでした。 キャレットはたまたまエスケープ文字であり、これが git コマンドが受け取っていた理由です。git-p4git

extractLogMessageFromGitCommit^HEAD^
HEAD0

この動作はECHO HEAD^0、コマンド プロンプトで入力することで確認できますHEAD0

解決策は、コマンドを に渡す配列形式を使用することfOpenです。これは、このコードの他の部分で推奨され、使用されています。

于 2019-06-19T23:14:53.020 に答える
0
fatal: Not a valid object name

どういうわけか、リモートの HEAD が間違った参照を指していることを意味するはずです。
つまり、git リポジトリで P4 インポートを行う場合、SHA1 が正しくないため、その git リポジトリから P4 に送信する方法がありません。なんで?知らない。

そのため、あなたが言及したスレッドで、ユーザー:

  • --import-local("Import into refs/heads/, not refs/remotes")を使用して、P4 リポジトリを B にクローンします。
  • B (p4 リポジトリの Git クローン) を裸のリポジトリにします (その作業ツリーが空であるため、B で作業することはありません)。
  • HEADB にインポートされた p4 master ブランチを参照するように B を修正

  • B を C にクローンし、裸のリポジトリではありません (その作業ツリーは空ではありません。その中で作業できます)。

B は最初のインポート時のみ存在しました。

残りの作業は C で行われます (不正な SHA1 の問題はありません)。

  • git-p4 syncremotes/p4/master(に加えて C で宣言するremotes/origin/*)
  • git-p4 submit
于 2010-04-22T18:02:45.600 に答える