更新できない特定のjsファイルを含むプロジェクトがあります。 OSXをローカルで実行し、リモート/ステージングサーバーはLinux(CentOS)です。
プロジェクトをローカルにクローンした直後、git status modified
のファイルがすべてあることに気付きました。変更したことがないので、discard changes
またはreset
それらが、それらは再び現れます。変更にある変更は、すべての行を削除してから再度追加することです。
なぜこれが発生するのか、それを修正してgitステータスが必要な状態になるように修正する方法がわかりません。
Gitステータスからの数行は次のとおりです。
# modified: app/webroot/js/ckeditor/plugins/devtools/lang/el.js
# modified: app/webroot/js/ckeditor/plugins/devtools/lang/fa.js
# modified: app/webroot/js/ckeditor/plugins/devtools/lang/gu.js
更新1:
上記のファイルをコミットすることができましたが、ステージングサーバーは新しい編集をプルしないためロックされています。
error: Your local changes to the following files would be overwritten by merge:
app/webroot/js/ckeditor/_source/lang/ar.js
app/webroot/js/ckeditor/_source/lang/bg.js
app/webroot/js/ckeditor/_source/lang/bn.js
app/webroot/js/ckeditor/_source/lang/cs.js
...
Aborting
次の理由でコミット/プッシュできません。
Updates were rejected because a pushed branch tip is behind its remote counterpart
私は試した:
git reset --hard
そして
git stash
git stash drop
しかし、それらは機能せず、何も起こりません。
更新2:
git diff
は私に与えます:
The file will have its original line endings in your working directory.
warning: CRLF will be replaced by LF in app/webroot/js/ckeditor/_source/lang/fa.js.
The file will have its original line endings in your working directory.
warning: CRLF will be replaced by LF in app/webroot/js/ckeditor/_source/lang/gu.js.
The file will have its original line endings in your working directory.
...
変更にある変更は、すべての行を削除してから再度追加することです。
これは、コミットされたファイルとディスク上のファイルの間で改行が変更されているためです。
Githubには 便利なページ があり、この種の問題に対処する方法を詳しく説明しています(Linux/OSXの場合)、ステップ1はgit configを変更して行末を整理することです:
git config --global core.autocrlf input
次に、行末の正規化をコミットします。
git rm --cached -r .
# Remove everything from the index.
git reset --hard
# Write both the index and working directory from git's database.
git add .
# Prepare to make a commit by staging all the files that will get normalized.
# This is your chance to inspect which files were never normalized. You should
# get lots of messages like: "warning: CRLF will be replaced by LF in file."
git commit -m "Normalize line endings"
# Commit
そして、行末を正しく処理する必要があります。詳細についてはgithubのヘルプページ、またはgit docs formatting and whitespace の関連セクションを参照してください。
ステージングサーバーは、新しい編集をプルしないためロックされます。
エラーメッセージには、「次のファイルへのローカル変更はマージによって上書きされます」と表示されます。つまり、続行する前にコミットまたは破棄する必要があるローカル変更が含まれています。ステージングサーバーの通常の使用状況(意図的な変更がない場合)を想定すると、ローカルの変更は破棄できます。たとえば、次のことを行います。
$ git fetch Origin
# Retrieve updates
$ git reset --hard Origin/master
# Forcibly change the current branch to match Origin/master
これにより、作業コピーを更新せずにリポジトリの履歴が取得され、リポジトリ内のmasterブランチと完全に一致するように更新されます。最後のコマンドは、コミットされていない変更をすべて破棄することに注意してください。
私はいつもあなたのcore.autocrlf
は「 Git:crlf正規化後にstashを使用してリポジトリをスタックしましたか? 」のようにfalse
に設定されます
git config --global core.autocrlf false
また、 .gitattributes
行末を変換しようとするeol
ディレクティブを含むファイル。
基本的な考え方は、noあらゆる種類の自動変換があることを確認したときに、そのエラーメッセージが表示されることです。
ただし、念のため、「 Gitリベースが失敗し、「次のファイルへのローカル変更はマージによって上書きされます」。ローカル変更はありませんか? "
私はMacを使用していますが、このあいまいな構成の変更は、ステージングされていない変更に関するすべての問題を解決したようです。
git config --global core.trustctime false
.svgファイル(Scalar Vector Graphics)の同じ問題に2時間(!)を費やしましたが、介入なしで'revert'の後に変化し続けました。
そのため、ファイルは'git status'で変更された状態で表示されます。元に戻すことは成功しますが、変化し続けるため、'pull'は何度も失敗します。
'git reset'、'git ignore'、'git untrack'などでは運がありません...
最後に、ローカルシステムからファイルを削除して解決しました('git delete'ではなく、Shift + Deleteのみ)>> 'pull'リクエストパスファイルはリモートリポジトリから取得されます。
とても簡単に、私は泣くことができました!
この問題は、UbuntuマシンのRoll20キャラクターシートリポジトリで繰り返し発生しました。
#!/bin/sh
# Use in root dir of git repository
# Fixes some newline-related weirdness
git rm --cached -r .
git reset --hard
しかし、これで今日は問題の完全な解決が止まり、Stack Overflowを見渡したところ、犯人は.gitattributes
ファイルであることがわかりました。
# Auto detect text files and perform LF normalization
* text=auto
git pull Origin master
の後、git status
が返されました:
On branch master
Your branch is up-to-date with 'Origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: Star Wars Revised RPG/SWRRPG-updated.html
no changes added to commit (use "git add" and/or "git commit -a")
解決策は、.gitattributesから* text=auto
行を削除することでした。
$ git status
On branch master
Your branch is up-to-date with 'Origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: .gitattributes
no changes added to commit (use "git add" and/or "git commit -a")
.gitattributes
の変更は破棄でき、Gitは引き続き満足されます。
編集+ 1d:.gitattributesを「トリック」して今日再試行しましたが、.gitattributesの変更を破棄する前にgit status
しませんでした。私には明らかな理由はありませんが(おそらくgit status
のキャッシュ?)、その後git status
が再びこれを返しました:
On branch master
Your branch is up-to-date with 'Origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: Star Wars Revised RPG/SWRRPG-updated.html
no changes added to commit (use "git add" and/or "git commit -a")
もう一度やり直したが、git status
の中間で機能した。