459

リポジトリに既存の Visual Studio プロジェクトがあります。最近、プロジェクトの下に .gitignore ファイルを追加しましたが、ファイルにリストされているファイルを無視するように Git に指示していると思います。

私の問題は、これらすべてのファイルが既に追跡されていることです。私が知る限り、Git は、このファイルにルールが追加されて無視される前に既に追跡されていたファイルを無視しません。

使用することが提案されました:git rm --cachedおよび手動でそれらを追跡解除しますが、それらを 1 つずつ調べるには永遠に時間がかかります。

リポジトリを削除して再度作成することを考えましたが、今回は.gitignoreファイルが存在しますが、これを行うためのより良い方法があるはずです.

4

7 に答える 7

70
  1. .gitignore ファイルを作成します。そのためには、空の .txt ファイルを作成するだけです。

  2. 次に、cmd に次の行を書き込んで名前を変更する必要があります (git.txtは作成したファイルの名前です)。

rename git.txt .gitignore

  1. 次に、ファイルを開き、完全に無視したい追跡されていないすべてのファイルを書き込むことができます。たとえば、私の場合は次のようになります。

    OSジャンクファイル [Tt]humbs.db *.DS_Store

    #Visual Studio ファイル *.[Oo]bj *.user *.aps *.pch *.vspscc *.vssscc *_i.c *_p.c *.ncb *.suo *.tlb *.tlh *.bak *. [Cc]ache *.ilk *.log *.lib *.sbr *.sdf .pyc .xml ipch/obj/[Bb]in [Dd]ebug / [Rr] elease / Ankh.NoLoad

    #Tooling _ReSharper*/ .resharper [Tt]est[Rr]result

    #プロジェクトファイル [Bb]uild/

    #Subversion ファイル .svn

    オフィス一時ファイル

    ~$*

GitHub による便利な .gitignore ファイルのコレクション全体があります

  1. これを取得したら、他のファイルと同じように git リポジトリに追加する必要があります。ただし、リポジトリのルートにある必要があります。

  2. 次に、ターミナルで次の行を記述する必要があります。

    git config --global core.excludesfile ~/.gitignore_global

公式ドキュメントから:

また、グローバル .gitignore ファイルを作成することもできます。これは、コンピューター上のすべての Git リポジトリ内のファイルを無視するためのルールのリストです。たとえば、~/.gitignore_global にファイルを作成し、いくつかのルールを追加します。

ターミナルを開きます。ターミナルで次のコマンドを実行します: git config --global core.excludesfile ~/.gitignore_global

リポジトリがすでに存在する場合は、次のコマンドを実行する必要があります。

git rm -r --cached .
git add .
git commit -m ".gitignore is now working"

ステップ 2 が機能しない場合は、追加したいファイルのホール ルートを記述する必要があります。

于 2015-02-17T14:17:12.107 に答える
40

ここで指定されているように、インデックスを更新できます:

git update-index --assume-unchanged /path/to/file

これにより、ファイルはgit statusまたはに表示されなくなりますgit diff

ファイルの追跡を再開するには、次を実行できます。

git update-index --no-assume-unchanged /path/to/file
于 2014-05-29T18:49:57.017 に答える
2

現在の一連の除外パターンで無視されるファイルを「追跡解除」する方法の 1 つを次に示します。

(GIT_INDEX_FILE=some-non-existent-file \
git ls-files --exclude-standard --others --directory --ignored -z) |
xargs -0 git rm --cached -r --ignore-unmatch --

これにより、ファイルは作業ディレクトリに残りますが、インデックスからは削除されます。

ここで使用されるトリックは、存在しないインデックス ファイルを git ls-files に提供して、追跡されたファイルがないと見なすようにすることです。上記のシェル コードは、インデックスが空の場合に無視されるすべてのファイルを要求し、git rm を使用して実際のインデックスからそれらを削除します。

ファイルが「追跡されていない」状態になったら、git status を使用して、重要なものが削除されていないことを確認します (削除された場合は、除外パターンを調整し、git reset -- path を使用して、削除されたインデックス エントリを復元します)。次に、「crud」を除外した新しいコミットを作成します。

「crud」は古いコミットに残ります。きれいな履歴が本当に必要な場合は、git filter-branch を使用して古いコミットのきれいなバージョンを生成できます (nb git filter-branch を使用すると「履歴が書き換えられます」。 「crud」が最初に導入された後の過去のコミット)。

于 2013-10-29T15:54:38.613 に答える