25

クローンリポジトリの1つは、これをgitfsckから取得しています。

致命的:緩いオブジェクト40bda4e3b79c3d7bf598df31d9e68470f97a3f79(.git / objects / 40 / bda4e3b79c3d7bf598df31d9e68470f97a3f79に保存)が破損しています

fsckがきれいになっている別のコピーを持っています。

致命的なものを含むディレクトリ/サブディレクトリを削除して、再クローン化してみました。問題は続きます。

私は本当に特定のファイルを気にしません、私はただリポジトリがきれいにチェックアウトすることを望みます。私は何をしますか?

注:リモートリポジトリはgithubでホストされています。

4

7 に答える 7

31

簡単な答え:古いリポジトリを移動して再クローン化します。保存したい古いレポにあるものがある場合、それらを取得する方法がありますが、最初に良いレポを取得します。

于 2012-07-22T01:05:11.760 に答える
7

アイデアは次のとおりです。

  1. まず、現在のプロジェクトの下にある現在のgitレコードを削除します.git(「プロジェクトA」で示します)。
  2. 現在のプロジェクトのコピーを作成します。複製を「プロジェクトB」と表記します。
  3. cdプロジェクトAとgitcloneに移動し、最後のコミットにリセットします。
  4. プロジェクトBからすべてのファイルをコピーし、プロジェクトAのファイルを置き換えます。
  5. ここでcdプロジェクトAに入り、プロジェクトAのステータスを確認するために使用git statusします。これまでに破損が発生しなかったかのようになります。

つまり、コピーを作成して現在の作業領域を予約し、ファイルを置き換えて新しいクローンとマージしてから、通常どおりに変更を処理します。

動作は次のとおりです。

  1. 最初に、破損していることがわかります(これは、昨日、仮想マシンを不適切にシャットダウンさせたためです:P):

    ✘domicor @ Ubuntuの〜/ドットファイルマスター●gitの状態エラー:オブジェクトファイル.git /オブジェクト/ CD / 593f6db1d5050406e15b9c80d215fd48db39f4空のエラーです:オブジェクトファイル.git /オブジェクト/ CD / 593f6db1d5050406e15b9c80d215fd48db39f4は致命的な空である:緩いオブジェクトcd593f6db1d5050406e15b9c80d215fd48db39f4(保存されました.git / objects / cd / 593f6db1d5050406e15b9c80d215fd48db39f4)が破損している 破損している

  2. フォルダのコピーを作成して、dotfilesフォルダを削除し.gitます。

    $ cd〜/ dotfiles $ rm -rf .git

    ドットファイル

  3. 次に、gitリポジトリを再作成します。

    $ git init

  4. リモートを追加します。

    $ git remote add origin git@git.oschina.net:domicor / dotfiles.git

  5. リモートからフェッチします。

    $gitフェッチ

    上記のコマンドのスクリーンショットは次のとおりです。rm-clone-fetch

  6. 次に、HEADをリセットします。

    $ git reset --hard origin / master

    これがショットです:リセット

    リモートからフェッチした直後にgit status、リポジトリのステータスをチェックするコマンドを発行したことに注意してください。すべてのファイルが追跡されていないことがわかります。また、コマンドラインプロンプトの最初の部分はコマンドからgit initコマンドへとオレンジ色でgit reset表示されます。これは、リポジトリを初期化すると、gitがファイルを検出し、リセット後、すべてのファイルがHEADの状態に復元され、緑色のプロンプトが表示されることを示します。

  7. アップストリームブランチを設定します。

    $ git branch --set-upstream-to = origin / master master

  8. 次に、バックアップフォルダ(私にとってはdotfiles (copy))からファイルを手動またはコマンドラインからコピーして、dotfilesフォルダ内のファイルを置き換えます。ステータスを確認すると、スクリーンショットのように変更が加えられるはずです。

    最後の

  9. これでgit diff your-filename、変更が適切に適用されているかどうかを確認でき、ファイルを追加して今後コミットできます。\ o /

さらに理解するために、gitVCSは変更を記録するだけです。VCSが破損している場合でも、ファイルは安全です。あなたが彼らを去ったとき、彼らはまだそこにいます。したがって、ファイルをバックアップし、他の場所からgitレコードを復元すると、gitは復元コピーを現在のファイルのステータスと比較し、破損前と同じように何が変更されたかについてのアイデアを得ることができます。そして乾杯\o/

于 2016-07-10T13:23:08.137 に答える
4

まず、ファイルシステムでエラーをチェックできます。fsck -y

次に、gitリポジトリを確認します。git fsck

于 2013-09-11T10:45:12.170 に答える
4

私はこの問題に直面し、この簡単なトリックで問題が解決しました。

ステップ1

ブランチ「my-new-feature」を持つ「my-project」という名前のフォルダでこの問題に直面していると仮定し、リポジトリを「my-project-dummy」という名前の新しいフォルダに複製し、「my-new-feature」にチェックアウトします。

ステップ2

「my-project」フォルダ内の「.git」フォルダを削除し、「。git」フォルダを「my-project-dummy」フォルダから「my-project」にコピーします

Tadaaaあなたは今行ってもいいです。

于 2019-08-14T07:02:57.897 に答える
0

他のブランチに対して行うgit checkoutと、変更されたファイルのリストが表示され、それらをコミットしてブランチにプッシュするだけです。これを行うと、問題は解決されます。次に行うときに、いくつかの変更が機能するgit statusはずです。

于 2015-09-11T18:55:28.167 に答える
0

リポジトリを再作成する必要があります。

  • .gitフォルダーを削除します
  • 作業ディレクトリからバックアップディレクトリにすべてをコピーします
  • git init
  • git remote add origin https://github.com/USERNAME/REPONAME.git
  • git pull
  • git checkout -b backup
  • gitadd。
  • git commit-m"バックアップの追加"
  • gitチェックアウトマスター
  • あなたは戻ってきました(マスターブランチ)
于 2021-02-08T16:10:56.780 に答える
-4

最も簡単な答えは「rm-rf.git...」です http://www.bazhukov.net/2015/02/git-corrupt-loose-object/

于 2015-05-21T18:50:47.753 に答える