[解決済み】gitレポと作業コピーでLF eolを強制する
質問
私はgithubでホストされているgitリポジトリを持っています。当初はWindowsで開発したファイルが多く、改行コードにあまり気を遣っていませんでした。最初のコミットを行ったとき、正しい改行コードを強制するためのgitの設定も行っていませんでした。その結果、私のgithubリポジトリには、改行コードがCRLFのファイルが多数存在することになりました。
今、部分的にLinuxで開発しているのですが、改行コードをきれいにしたいんです。どうすれば、ファイルがgithub上でLFで正しく保存され、私の作業コピーでもLFであることを確認できますか?
を設定したのですが
.gitattributes
を含むファイル
text eol=LF
でいいのでしょうか?コミットされ、プッシュされた状態で、私は
rm
ローカルにある私のレポを github から再クローンして、望ましい効果を得ることができますか?
どのように解決するのですか?
リポジトリにどのようなファイル(純粋なソースコード、画像、実行ファイル、...)があるかについての情報が少しないと、この質問に答えるのは少し難しいです :)
これとは別に、作業ディレクトリの行末をLFにするのは、WindowsでもLinuxでも、.gitリポジトリのテキストファイルの行末をLFにすることを望んでいるからだと考えることにします。確かに、転ばぬ先の杖ですね...。
しかし、もっと良い方法があります。LinuxのワークディレクトリではLF改行、WindowsのワークディレクトリではCRLF改行、そしてリポジトリではLF改行の恩恵を受けられるのです。
LinuxとWindowsで部分的に作業しているので、必ず
core.eol
が設定されています。
native
と
core.autocrlf
が設定されます。
true
.
次に
.gitattributes
ファイルを次のように変更します。
* text=auto
これは、コミットやチェックアウトの際に改行コードの自動変換をGitに行わせるものです。バイナリファイルは変更されません。テキストファイルとして検出されたファイルは、改行コードがその場で変換されます。
しかし、あなたはリポジトリの内容を知っているので、Gitに手を貸して、バイナリファイルからテキストファイルを検出させることができます。
C言語ベースの画像処理プロジェクトで作業している場合、以下の内容を置き換えてください。
.gitattributes
ファイルを次のように変更します。
* text=auto
*.txt text
*.c text
*.h text
*.jpg binary
これにより、拡張子が c, h, txt のファイルは、レポでは LF 行末で保存され、作業ディレクトリではネイティブの行末になります。Jpeg ファイルは触れません。その他のファイルは、上記と同様の自動フィルタリングが適用されます。
これらの内部詳細についてより深く理解するために、この非常に良い投稿に飛びつくことをお勧めします。 "行末に注意" GithubberのTim Clem氏より。
実例として、こちらも覗いてみてください。
コミット
ここで、それらの変更を
.gitattributes
ファイルのデモを行います。
以下のコメントを考慮して回答をUPDATEしてください。
私のLinux環境は、実際にはWindowsディレクトリを共有するVirtualBoxなので、WindowsディレクトリにCRLFはいらないのです
理にかなっている。明確な説明ありがとうございます。この特定のコンテキストでは
.gitattributes
ファイル単体では十分ではありません。
リポジトリに対して以下のコマンドを実行します。
$ git config core.eol lf
$ git config core.autocrlf input
リポジトリはLinux環境とWindows環境で共有されているので、両方の環境のローカル設定ファイルを更新します。
core.eol
は、チェックアウト時にテキストファイルの改行コードがLFであることを確認します。
core.autocrlf
は
潜在的
テキストファイルのCRLFは(例えばコピー&ペースト操作の結果)、リポジトリではLFに変換されます。
オプションで、Git がどのような
は
を作成することで、テキストファイルの
.gitattributes
のようなものを含むファイルです。
# Autodetect text files
* text=auto
# ...Unless the name matches the following
# overriding patterns
# Definitively text files
*.txt text
*.c text
*.h text
# Ensure those won't be messed up with
*.jpg binary
*.data binary
を作成することにした場合
.gitattributes
ファイルを作成します。
コミットする
.
最後に
git status
について言及します。
"コミットするものがない(作業ディレクトリがクリーン)"。
を実行した後、以下の操作を行います。
$ git checkout-index --force --all
これは、作業ディレクトリにあるファイルを、設定変更と
.gitattributes
ファイルを作成し、テキストファイル内の見落としの可能性のあるCRLFを置き換えます。
この作業を行うと、作業ディレクトリ内のすべてのテキストファイルの行末がLFになり、かつ
git status
は、まだワークディールをクリーンと見なすべきです。
関連
-
gitアップロードの共通エラー処理
-
[解決済み] git commit signing failed: secret key not available.
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] 2 つの Git リポジトリをマージする方法は?
-
[解決済み] サブディレクトリを別のGitリポジトリに切り離す(移動する)。
-
[解決済み] detached HEADとmaster/originの連携はどうすればいいですか?
-
[解決済み] Gitのプッシュを正しく強制する方法は?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】現在のブランチの先端がリモートブランチより遅れているため、更新が拒否されました。
-
[解決済み】Git, fatal: リモートエンドが予期せずハングアップしました。
-
[解決済み】Git サブモジュール head 'reference is not a tree' エラー
-
Gitのプッシュでエラーが発生! [リモート拒否] master -> master (pre-receive hook declined) error: failed to push some refs to .......
-
git revert + git rebase 一度に複数のコミット_本然233的博客程式员息信网_git revert Multiple
-
[解決済み】gitの「not something we can merge」エラーの解決方法
-
[解決済み] ブラウンアウトの一環として、パスワード認証が一時的に無効になっています。代わりに個人用アクセストークンを使用してください[重複]。
-
[解決済み] 新しいBitbucketでリポジトリを削除するにはどうすればよいですか?
-
[解決済み】git filter-branchで行末を修正しようとしたがうまくいかない
-
[解決済み] [Solved] サブディレクトリをgit reset --hardする方法は?