に次の行を追加しました.gitignore
。
sites/default/settings.php
しかし、タイプするgit status
とファイルはステージングされていないファイルとして表示されます。
どうしたの?他のすべてのパターンはうまく機能します。
に次の行を追加しました.gitignore
。
sites/default/settings.php
しかし、タイプするgit status
とファイルはステージングされていないファイルとして表示されます。
どうしたの?他のすべてのパターンはうまく機能します。
回答:
.gitignore
が作業ディレクトリのルートにあることを確認し、そのディレクトリでステータス出力からファイルへのパスを実行git status
してコピーし、に貼り付け.gitignore
ます。
それが機能しない場合は、ファイルがすでにGitによって追跡されている可能性があります。これはの出力で確認できますgit status
。ファイルが「追跡されていないファイル」セクションにリストされていない場合、そのファイルはすでにGitによって追跡されており、.gitignore
ファイルからのルールは無視されます。
Gitでファイルを無視する理由は、それらがリポジトリに追加されないようにするためです。以前に無視したいファイルを追加した場合、そのファイルはGitによって追跡され、それに一致する無視ルールはスキップされます。ファイルはすでにリポジトリの一部であるため、Gitはこれを行います。
ファイルを実際に無視するには、ファイルを追跡解除してリポジトリから削除する必要があります。これは、を使用して行うことができますgit rm --cached sites/default/settings.php
。これにより、ファイルを物理的に削除することなく、ファイルがリポジトリから削除されます(それがの--cached
機能です)。その変更をコミットした後、ファイルはリポジトリから削除され、無視しても正しく機能するはずです。
.git
が配置されているディレクトリであり、それ自体がリポジトリのルートです。あなたがリポジトリのクローンを作成するときと同じように/xy/
、その後/xy/
で自分の作業ディレクトリである/xy/.git/
内部。
git add .
後にgit rm --cached
適切にインデックスを再構築します。
私はこれに遭遇しました、それは古い質問ですが、そのファイルは追跡されるが、特定の作業コピーでは追跡されないようにして、実行できることを行います
git update-index --assume-unchanged sites/default/settings.php
.gitignoreは、リポジトリにまだ追加していないファイルのみを無視します。
を実行しgit add .
、ファイルがインデックスに追加された場合、.gitignoreは役に立ちません。git rm sites/default/settings.php
削除する必要がありますが、無視されます。
git rm
これを行う必要がありますが、-fオプションを使用して作業ディレクトリから削除するように求められる場合があります。私はファイルのコピーを作成しgit rm -f
、それを実行してからコピーを復元する以外にこれを理解していません。
私も同じ問題を抱えていました。.gitingore
実行時に未追跡ファイルとしてリストされている場所で定義されたファイルgit status
。
その理由は、.gitignore
ファイルがUTF-16LE
エンコードではなくエンコードで保存されたためUTF8
です。
.gitignore
ファイルのエンコーディングを変更した後UTF8
、私にとってはうまくいきました。
たとえばgitで追跡したい(たとえば.gitignoreが機能しない)アプリケーション構成ファイルなどのインスタンスがありますが、ローカル設定を変更する必要があります。これらのファイルをgitで管理したり、変更されたものとして表示したりしたくありません。これを行うには、skip-worktreeを使用します。
git update-index --skip-worktree path/to/file
ファイルをリストし、Sで始まる行をスキップしてスキップしたことを確認することで、ファイルがスキップされたことを確認できます。
git ls-files -v | grep ^S
将来的にgitでファイルをローカルに再び管理する場合は、次のコマンドを実行します。
git update-index --no-skip-worktree path/to/file
上記のメスカリトは素晴らしい答えを出しました、それは私を正しい道に導きましたが、
git update-index --assume-unchanged file / to / ignore.php
gitと契約を結んでいます。ユーザーはファイルを変更しないことを約束し、Gitが作業ツリーファイルがインデックスに記録されているものと一致すると想定できるようにします。
ただし、ファイルの内容を変更するため、私の場合は--skip-worktreeの方が適しています。
Toshiharu NishinaのWebサイトは、skip-worktreeと仮定が変更されていないことの優れた説明を提供しました:ローカルでGitで既に管理されているファイルを無視します
もう1つの考えられる理由 – 同時に実行しているgitクライアントのインスタンスがいくつかあります。たとえば、「git shell」+「GitHub Desktop」などです。
これは私に起こりました、私はメインクライアントとして「GitHubデスクトップ」を使用していて、いくつかの新しい.gitignore設定を無視していました:コミット後にコミット:
理由:Visual Studioコードエディターは、同じリポジトリが開かれているバックグラウンドで実行されていました。VS Codeにはgitコントロールが組み込まれているため、競合が発生します。
解決策:複数の非表示のgitクライアントを再確認し、一度に1つのgitクライアントのみを使用します(特にgitキャッシュをクリアする場合)。
.gitignoreに拡張子がないことを確認してください!! .gitignore.txtにすることはできません。Windowsでは、ファイル名を.gitignoreにしてください。そしてそれは動作します。
私はこれをgit 1.7.3.1で試してみて、次のような構造を与えました:
repo/.git/
repo/.gitignore
repo/sites/default/settings.php
ここでrepo
、上記の「ルート」はここにあり(私はそれを作業ツリーのルートと呼びます)、それ.gitignore
だけが含まれsites/default/settings.php
、無視は私にとって機能します(.gitignore
リポジトリに追加されているかどうかは関係ありません)。これはあなたのリポジトリのレイアウトと一致していますか?そうでない場合、何が異なりますか?
将来の誰かが私と同じ問題を抱えている場合に備えて:
あなたが使用する場合
*
!/**/
!*.*
拡張子のないバイナリファイルを削除するには、他のすべてのgitignore行が以下であることを確認してください。Gitは上から.gitignoreから読み取るため、gitignoreに「test.go」が含まれていても、最初はファイル内にあり、その後「無視」されました
!*.*