2017-12-06 14 views
0

git cloneの異常な動作が発生しました - git cloneの直後にbitbucketでホストされているgitリポジトリ内のファイルの一部が変更されています。この問題は、以下の質問に報告されたものに似ていますgit cloneはファイルタイプとコンテンツを再現不可能な方法で変更します

  • Git status shows files as changed even though contents are the same
  • Files showing as modified directly after git clone
    • が、まったく同じでは見えません。私の場合、約2千のファイルのうち2つだけが変更されています。私はの直後に git cloneの修正を検出しました。これらの変更されたファイルは、もともとASCIIエンコーディングでテキストファイルだったが、 fileコマンドがあったとしてクローニングした後、彼らは、バイナリファイルとして見なされていた: t_pot_2e_fft002.f90が変更されることが判明したファイルである

      [email protected] $ file -bi t_pot_2e_fft002.f90 
      text/plain; charset=us-ascii 
      
      [email protected] $ file -bi t_pot_2e_fft002.f90 
      application/octet-stream; charset=binary 
      

      これらの変更されたファイルで

      、いくつかのすべてではなくコンマ,、空白のを、およびアンダースコア_は、一部の非ASCII文字に置き換えられましたが、私はまだlessコマンドやemacsでファイルの大部分を読むことができます。

      異なるローカルディレクトリに6回クローニングを繰り返しましたが、私はその変更を2回見ました。他の4回は修正がなかった。ファイルが修正された2つのケースでは、変更されたファイルはケースごとに異なりました。

      私は、machine-originalmachine-original2(これ以上私はアクセス権がありません)のリポジトリで、bitbucketのリモートリポジトリにプッシュ&フェッチしていました。今私はmachine-newにビットバケット上のこのリポジトリを複製しています。 gitのバージョンは、machine-original1.9.1machine-newには2.14.1です。 (編集:machine-original実行のUbuntu 14.04とmachine-new実行Ubuntuの17.10。)

      私はこの問題を実現するまで私はmachine-originalcore.filemode=trueを持っていました。それから、私はそれをfalseに変更しましたが、私はgit pushを行っただけで、Everything up-to-dateしか得られませんでした。

      an answerに記載されているファイル.gitattributesはありません。

      クローン作成時にこれらの再現性のない変更が行われた理由は誰でも説明できますか? の直後にgit statusによって変更が検出されなかった場合、複製されたリポジトリを使用しても安全ですか?

    +0

    マシンの新しいマシンの元は、異なるOSや同じOSを持っていますか?通常、異なるOSの場合、ファイルをさまざまな方法でエンコードします。 –

    +0

    コメントありがとうございます。 machine-originalはubuntu 14.04、machine-newはubuntu 17.10です。 – norio

    +0

    コマンド 'hexdump -bc t_pot_2e_fft002.f90'の出力は、2台のマシンで別々にコマンドを実行しても同じですか? –

    答えて

    0

    別のマシンからの出力hexdump -bc t_pot_2e_fft002.f90は異なるため、エンコードが異なることを意味します。おそらく、ファイルがエンコーディングの種類が異なる別のマシンからプッシュされ、別のマシンにレポをクローンすると、別の方法でエンコーディングされます。

    エンコードの詳細については、Dealing with inconsistent or corrupt character encodingsを参照することもできます。

    core.filemodefalseと設定すると、実際にはファイルは変更されず、「元のエンコードは無視されました」と表示されます。そして、あなたの状況に、あなたはより良いfalseとしてcore.filemodeを設定したい:

    core.fileMode

    作業 ツリー内のファイルの実行ビットが尊重される場合にGitに指示します。

    とマークされたファイルがチェックアウトされた場合、または実行可能ファイルが 実行可能ビットでオンになっているファイルをチェックアウトすると、実行可能ビットが失われることがあります。 gitのクローン1かのgit-INIT 1プローブファイルシステム にそれが正しく実行ビットを処理し、この変数は必要に応じて自動的に設定 であるかどうかを確認します。

    リポジトリは、しかし、正しく ファイルモードを扱うファイルシステム上にあってもよいし、作成したとき、この変数がtrueに設定されているが、後 が ファイルモードを失い、別の環境からアクセスしてもよい(例えばext4のをエクスポートしますCIFSマウントでCygwin のGit for WindowsまたはEclipseでリポジトリを作成してください)。そのような場合は、この変数をfalseに設定するために が必要な場合があります。 git-update-index 1を参照してください。 (core.filemodeが設定 ファイルで指定されていない場合)

    デフォルトはtrueです。

    詳細はcore.fileModeを参照してください。

    関連する問題