git update-index --assume-unchangedが「致命的なファイルのマーク付けができません」を返す


133

私はこの投稿のOPと同じ問題を抱えていますが、正しいとマークされた回答を理解していません(状況を修正する方法を説明しているようには見えません)

私はこれを行い、このエラーを受け取ります:

$ git update-index --assume-unchanged web.config
fatal: Unable to mark file web.config
  1. ファイルはリポジトリに追加されます

  2. それはない .git/info/exclude

  3. それはありません.gitignore(それはありましたが、私はそれを取り出し、web.configを強制的に使用して追加しgit add -f web.config、コミットし、それらの変更をリポジトリにプッシュしました)

  4. Git ls-files -oを実行すると、そこにはありません

だから私は何を修正することができますか?


1
参照された質問で受け入れられた回答をもう一度読んでください。それはの出力には表示されませんgit ls-files -o。もしそうなら、それはリポジトリにありません。
12

私のタイプミス、それはリストにありません、そしてそれは最も間違いなくレポにあります
Karen

回答:


108

私はあなたと同じ問題を抱えていて、上で示したのと同じ4つの手順を実行し、同じ結果が得られました。これには、実行時にファイルがリストされたという事実が含まれますgit ls-files -o。しかし、私の場合、実行git update-index --assume-unchanged時にリストされていないファイルに対しても実行しようとしls-files -oましたが、それでも同じエラー「fatal: Unable to mark file」を受け取りました。

おそらくバグだと思い、最新バージョンのgitをダウンロードしましたが、役に立ちませんでした。

私が最終的に気付いたことは、このコマンドは大文字と小文字を区別することです!これには、絶対パスとファイル名が含まれます。 ディレクトリへのパスを更新して、フルパスが適切な大文字小文字で指定された後、コマンドは正しく実行されました。

これはGit for Windowsを使用していたため、他のプラットフォームによって結果が異なる場合があることに注意してください。


4
どうもありがとうございます!これはうまくいった!以前はすべて小文字を使用していたか、またはcdでフォルダーに移動してから、このコマンドを使用しようとしました。
Karen

ファイルが変更される場合、これは誤りです。このコマンドは、ユーザーがGitに約束したものであり、ファイルが変更されたかどうかを検出するためにファイルの記述でサイクルを無駄にする必要がないことを示しています(遅いファイルシステムの場合;-)。最終的にGitコマンドの1つに気づき、あなたは驚かれることでしょう。ドキュメントは、これを明確にするために更新されています。
Philip Oakley

1
おかげで、これは間接的にプロジェクト内のいくつかの不良シェルスクリプトを発見するのに役立ちました。パスが存在しない場合、これは失敗します!:)
uchuugaka 2017

また、このコマンドはバージョン管理されていないファイルに対しては機能しないことにも注意してください。リポジトリに存在しないファイルがある場合、それは.gitignoreで無視できます。私はこれを馬鹿に入力しているように感じますが、私と同じように誰かが役に立たないかもしれません。:)
Jesse Ivy

一部のコメントが示唆していることを明確にするために、CDの大文字と小文字の不一致を回避できるWindowsシェルを使用している場合、このエラーが発生します。gitにファイルへの完全なパスを指定するか(大文字と小文字を区別)、またはcdを上下に移動して(もう一度、すべての段階で大文字と小文字を区別して)ください。
dlf

54

Macでも同じ問題が発生していました。大文字と小文字の区別は私にとって問題ではありませんでした-問題は私が最初にgitをリセットする必要があったことです:

問題:

 git update-index --assume-unchanged index.php
 fatal: Unable to mark file index.php

解決:

git reset HEAD
Unstaged changes after reset:
M   index.php
git update-index --assume-unchanged index.php

2
Macでも同じ問題が発生しており、推奨される回避策はどれもうまくいきませんでした。何か案が?私のマシンで一時的にディレクトリの追跡を停止しようとしています。ディレクトリの名前はintellij_idea_project_files /です。明らかに、このディレクトリ内のすべてのファイルは1つを除いて適切にマークされています。それはmy_project_name.imlです。
Javad Sadeqzadeh 2015

1
同じ問題があり、これは私にとってうまくいった解決策であり、大文字と小文字を区別するものではありません
CesarPim

私もMacを使っており、私にとっての「解決策」はファイルを削除することでした。(私はこれを回答として投稿しますが、何が起こったのか、おそらく後でわかりません。)奇妙なことが起こりました。Gitはファイルが変更されたと言っていました(私はしたかった--skip-worktree)。実行してローカルの変更を取り除きましたgit restore .が、スキップはまだエラーを出しました。最後にファイルを削除してみました。驚いたことに、Gitは変更があったとは言いませんでした。ですから、gitが間違いなく追跡していて、私は間違いなく何かファンキーなことが起こっていて、それを削除したことは間違いなく、それが変更であるとは言いませんでした。
キャプテンマン

25

私の場合、マークしたツリーはディレクトリであり、あなたの場合のようにファイルではなく、名前の後にスラッシュがありませんでした。

不正解-

git update-index --assume-unchanged directory-name

正解-

git update-index --assume-unchanged directory-name/

最後のスラッシュ(/)に注意してください


1
おかげで、しかし私がこれをするとき、私は「Ignoring path directory-name /」を取得します
damian

@damian親ディレクトリの代わりに完全なファイルパスを指定します。
Nahid、

6

fatal:ファイルLocalization / el-GR.jsをマークできません

あなたができることは:

  1. ローカルにあるファイル(GITBASH内)の正しいパスに移動します。
  2. インデックスを更新する $git update-index --assume-unchanged <file name>

これは私を助けました!:)


2
$ git update-index --assume-unchanged ./.idea/vcs.xml fatal: Unable to mark file .idea/vcs.xml $ cd .idea git update-index --assume-unchanged .お疲れ様でした!
AVProgrammer 2016

4

パスにスペースが含まれている場合、大文字と小文字が正しく設定されていても、このエラーが発生することがあります。

これにより、「致命的な」エラーが発生します。

git update-index --assume-unchanged code/Solution Files/WebEssentials-Settings-json

これを修正するには、パスを引用符で囲みます。

git update-index --assume-unchanged "code/Solution Files/WebEssentials-Settings-json"

私の場合、私は/を逆にしました。
Erik Bergstedt 2016年

4

私の問題は、*ワイルドカードを使用してコマンドを再帰的であると想定して試行したことですが、そうではありませんでした。

だから私がしたことは

$ git reset HEAD
Unstaged changes after reset: 
M   .gradle/1.9/taskArtifacts/cache.properties.lock
M   .gradle/1.9/taskArtifacts/fileHashes.bin
M   .gradle/1.9/taskArtifacts/fileSnapshots.bin
M   .gradle/1.9/taskArtifacts/outputFileStates.bin
M   .gradle/1.9/taskArtifacts/taskArtifacts.bin

実行

$ git update-index --assume-unchanged .gradle/1.9/taskArtifacts/*

そのとき私のために働いて、OPと私の問題に帰着しませんでした。


4

* .origファイルの追跡を解除しようとしたときに、この問題が発生しました。

これは私がそれらを追跡解除するためにしたことです:

$git reset -- *.orig

それがうまくいかない場合:

$git clean -fd

5
このコマンドでファイルが削除されることを知らせずにコマンドを実行するように人々に依頼するのは危険です。$ git clean -fd
HS Rathore

4

ファイルがgit repoに追加されていることを確認してください。そうでない場合は、git repoにファイルを追加してください。


3

--assume-unchanged遅いファイルシステムに関するものであり、Gitは変更されていないと想定できるため、ユーザーはGitがこのファイルをチェックする必要がないことを約束します。しかし、一部のコマンドはまだ「驚き」を確認して生成します!

変更されるファイルには使用しないでください。

そのニュースの持ち主になって申し訳ありません(そのドキュメントを変更するためのパッチが進行中です)。


1
次に、ファイルを更新して「追跡しない」とマークするにはどうすればよいですか?
javadba 2015

@javadba See stackoverflow.com/a/6964492/717355 'git rm --cached filename'
Philip Oakley

thx-それについて賛成:私は実際にここに投稿した直後にそれを使用していました。動作します。
javadba

git rm --cached filename他の人が引っ張るとファイルが削除されることに注意してください
Ryan Taylor

@RyanTaylorはい、ユーザーがコマンドの意味を理解することは重要です。これは、「追跡を停止し、自分のリビジョンから削除する」ことです。メンテナーの最新の見解と私の新しいパッチを読んでください。public
Philip Oakley

3

私の場合、上記の方法のいずれかを使用しようとしましたが、うまくいきませんでした。

多くの試みの後、私は自分のファイルをインデックスに追加することを考えました。

git add myfile.php

Gitはこのアクションを拒否しましたが、強制的に実行するようにアドバイスされました。

git add myfile.php -f

そしてそれは私のために働いた。


2

「web.config」がチェックインされていることを確認してください。

そうでない場合は、このエラーメッセージが表示されます。


1

多分誰かのために役立つでしょう。私は同じ問題を抱えていて、構文の問題も、名前のスペースもパスの問題もなく、git resetコマンドも機能しませんでした。私はapache www内のフォルダーからコミットしていましたが、apacheサービスが停止しました。Apacheサービスを再開しましたが、エラーは発生していません


1

このコマンドの使用に関する一般的な間違いの1つは、追跡されていないファイルか、すでにgitによって無視されているファイルのいずれかを想定しようとしていることです。

最初に、ファイルを実行して追跡されていることを確認してください

git ls-files | grep relative_path/to/file

ファイルが表示されない場合は、最初に追加する必要があります。

git add relative_path/to/file

これがあなたのファイルを示している場合、またはすでにそのファイルをgitに追加している場合は、通常のgit assumeコマンドを実行できるはずです。

git update-index --skip-worktree relative_path/to/file

またはフォルダ用

git update-index --skip-worktree relative_path/to/folder/

次のコマンドを実行すると、ファイルが無視されていると見なされているかどうかを確認できます

git ls-files -v | grep ^S

S文字はスキップされたファイルを表します。


0

将来のすべての訪問者のため。上記のどれも私の問題を解決しませんでした。私が気づいたことは、.gitignoreファイルが正しいディレクトリに配置されなければならないということです。私の場合、.gitignoreアプリケーションのルートディレクトリに移動すると、問題は解決しました。


0

マークするファイルが存在し、スペルが正しいかどうか、特にファイルパスとファイル区切り文字を確認してください。WindowsシステムとLinuxシステムのファイルセパレータは方向が異なります。


1
間違いではありませんが、この答えは質問に実際には何も追加しません。すべての提案はすでに既存の回答で取り上げられています。
マット

0

.gitignoreにファイルを既にコミットし、プッシュまたはプルを行っているため、これが機能しないことがあります。ファイルをローカルで変更した場合でも、プッシュを行うだけで、その後のコミットでファイルが無視されます。


0

Windowsのcygwinでも同じ問題が発生しました。完全なファイルパスを与える

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.