4

修正が必要なもの:

.md私が書いているエッセイを含む単一のファイルを含むリポジトリがあります。

Linux を実行している 1 台と Windows を実行している 2 台のコンピューターからファイルを編集します。

いくつかの変更を加えた Windowsで agit diffを見ると、エッセイが適切に区切られたテキスト行として表示されていることがわかります...すべてが削除され、段落が^Ms で区切られた 1 つの長い行に置き換えられようとしています。

^MWindows の CLRF 行末を参照していることは承知しています。

diff結果は、Linux でファイルを開始し (完全に可能です。覚えていません)、それを Windows に保存し、すべての行末が置き換えられたことを意味します。

diff両方の OS でファイルを開き、必要に応じて行が表示され、 (プレースホルダーではなく) 改行が表示さ^Mれ、実際のコンテンツのみが変更される結果が得られるようにしたいと考えています。

私が試したこと:

背景を読んだり、行末と Git 設定の概要を読んだり、別の Stack Overflow questionのコマンドに従ってみたりしました。

.gitattributes現状では、リポジトリ自体にコミットしたリポジトリの最上位に1 つのファイルがあります。次の 2 行だけが含まれています。

# These files are text and should be normalised (convert Windows' CLRF to LF)
*.md text

私はこれを試しました(source):

git rm --cached -r .
git reset --hard
git add .
git commit -m "Normalize line endings"

そしてこれ(ソース):

git rm --cached -r .
git config core.autocrlf input
git diff --cached --name-only -z | xargs -0 git add
git commit -m "Fixed crlf issue"

2 番目のケースでは、最後のコマンドで、コミットするものが何もないことがわかります。core.autoclrf(純粋に を介してこれを行おうとしているので、を変更するという考えも好きではありませんが、.gitattributesイライラしています。)

喜んで質問に答え、詳細を提供します。私が間違っている可能性のあるアイデアはありますか?手順がありませんか?

4

1 に答える 1

1

使ってみるだけ

*.md text eol=native

それ以外の

*.md text

あなたの .gitattributes で。

CR-LF ファイルを含む小さなテスト リポジトリをセットアップし、最初の手順に従って正規化を実行しました。

git rm --cached -r .
git reset --hard
git add .
git commit -m "Normalize line endings"

チェックイン時に正しく正規化されたファイル。しかし、奇妙なことに、OSX を使用している場合でも、チェックアウト時に CR-LF を維持していました。

おそらく、core.eol のデフォルト値はネイティブです。そのため、git が LF だけを使用してファイルをチェックアウトすることを期待していました。しかし、何らかの理由で、それを行っていないようです。だから、.gitattributes の私の理解に欠陥があるか、git に報告するバグがあります...

いずれにせよ、私が言ったように、明示的に .gitattributes に eol=native を設定するとうまくいきました。

于 2014-02-17T15:55:02.810 に答える