私はMavenプロジェクトに取り組んでおり、プロジェクト(評価)ルートフォルダの/ targetフォルダに生成および保存されたファイルを無視したいですgitリポジトリのルートには、次のエントリ(バックエンドを持つ.gitignoreファイルがありますEclipseプロジェクトの評価を含む単なるフォルダーです)
backend/Evaluation/logs/
backend/Evaluation/target/
何らかの理由で、SourceTreeはこれら2つのフォルダーに保存されているファイルを無視せず、プロジェクトをコンパイルすると、/ targetフォルダー内のいくつかの.classファイルであるコミットされていない変更があります。
なぜこうなった ?また、.gitignoreエントリを
/ backend/Evaluation/logs/**
しかし、それもうまくいきませんでした。
何か案は ?
誤ってリポジトリに追加されたファイルがあるとしましょう:
stackoverflow$ echo this file is important > junkfile
stackoverflow$ git add junkfile
stackoverflow$ git ci -m 'added a file'
ある時点で、ファイルが重要ではないことがわかったため、.gitignore
ファイルに追加します。
stackoverflow$ echo junkfile >> .gitignore
stackoverflow$ git ci -m 'ignore junkfile' .gitignore
後で、そのファイルにいくつかの変更を加えます。
stackoverflow$ sed -i 's/ is / is not/' junkfile
そしてもちろん、ファイルが.gitignore
にリストされていても、既に追跡することをgitに伝えているので、git status
は以下を示します。
stackoverflow$ git status
# On branch 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: junkfile
#
no changes added to commit (use "git add" and/or "git commit -a")
このファイルをリポジトリから削除する必要があります(作業ツリーからファイルを削除せずに)。これを行うには、--cached
フラグをgit rm
に設定します。
stackoverflow$ git rm --cached junkfile
rm 'junkfile'
これにより、delete
操作がステージングされます...
stackoverflow$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: junkfile
#
...そのため、コミットする必要があります。
stackoverflow$ git commit -m 'removed junkfile from repository'
[master 19f082a] removed junkfile from repository
1 file changed, 1 deletion(-)
delete mode 100644 junkfile
git status
を実行すると、gitはこのファイルを無視します:
stackoverflow$ git status
# On branch master
nothing to commit, working directory clean
まだ作業ツリーにありますが:
stackoverflow$ cat junkfile
this file is not important
私があなたに答える質問にSourcetreeタグがあるので、Sourcetreeでこれを行う方法、それは本当に簡単です。
前に述べたように、最初に追跡からファイルを削除してから、Sourcetreeにファイルを無視させる必要があります。
ファイルが既にGitリポジトリに追加またはコミットされている場合、。gitIgnoreによって無視される前に、まず追跡を停止する必要があります。
SourceTreeでファイルの追跡を停止するには:
ファイルを右クリックします。 [追跡の停止]を選択します。
(これはファイルを削除せず、ファイルの追跡を停止するだけです)
コマンドラインからのファイルの追跡を停止するには:
git rm --cached example.txt
Binフォルダー(フォルダー全体)の追跡に問題がありました。
そのため、ここに簡単な手順を示します(私は視覚的なタイプなので、より視覚的です)。
これが誰かの助けになることを願っています。
上記の回答に加えて、.gitignore
ファイルがルートフォルダーにない場合は機能しないことにも注意してください。
.gitignore
がここにあった/projectname/.gitignore
のプロジェクトがあったため、読まれていませんでした。それで私はそれを/.gitignore
に移動しましたが、すべてうまくいきました。
リポジトリを削除し、リポジトリが再作成されたときにフォルダに.gitignoreファイルを置くことで、無視ファイルが尊重されることがわかりました。
これは私のために働いた:
git update-index --assume-unchanged some.file
これに数時間苦労し、ここでの提案を含むいくつかのことを試みました-無駄に...最終的に私のために働いたのはbitbucket.org内でリポジトリを設定するときに.gitignoreファイルを作成することでした、そのファイルをローカルにプルし、自分で作成しようとしていたファイルとまったく同じ内容を貼り付け、最終的にすべてが機能するようになりました。