4

そのため、Git でファイル パスが何らかの形でめちゃくちゃになるという奇妙な問題が発生しています。ここに私が何を意味するかを示すスクリーンショットがあります:

スクリーンショット

問題は、スクリーンショットの 2 番目のファイルが "Frontend\UserType.php" (セパレーターとしてバックスラッシュ) になっていることですが、"Frontend/UserType.php" (上のように) である必要があります。何らかの理由で両方のファイルが表示されます。git ls-files を実行すると、「Frontend\UserType.php」というファイルが取得されます。

私の同僚は TortoiseGit で Windows 7 を使用しており、私は Debian を使用しており、コマンド ラインから git を使用しています。問題が最初にどこで発生したのかはわかりませんが、非常にイライラするようになっています. ファイルを削除してプッシュしようとしましたが、どうにかして戻ってきます。

現在、多数のブランチに感染しています。一体何が起こっているのか誰か知っていますか?また、複数のブランチにわたってそれを修正するにはどうすればよいでしょうか?

4

2 に答える 2

3

完全なログがなければ、何が起こったのかを正確に言うのは困難です。コメントで説明したように、これは「Frontend\UserType.php」という名前のファイルをコミットしたようです。

Git はスラッシュ ("/") をパス区切りとして使用し、ファイル名にバックスラッシュを使用しても問題ないため、git では問題ありません。Windows システムでチェックアウトしようとすると、おそらく混乱が生じるでしょう。

最良のオプションは、Linux/Unix でリポジトリを複製するか、場合によっては Cygwin を使用して、間違った名前のファイルを削除または名前変更することです。理想的には、履歴からもそれらを削除したい場合があります (そうしないと、古いバージョンがチェックアウトされた場合に問題が発生する可能性があります) が、これは必要ない場合があります。

于 2013-09-24T13:19:11.097 に答える
3

興味のある方のために、すべてのブランチでファイルを削除してから、次のコマンドを使用してすべてをリモートにプッシュすることで問題を解決しました。

git filter-branch --force --index-filter \
  'git rm --cached --ignore-unmatch path/to/file' \
  --prune-empty --tag-name-filter cat -- --all

git push origin --all --force
于 2013-09-24T16:59:58.057 に答える