web-dev-qa-db-ja.com

Sourcetreeの.gitignoreファイルが機能しない

私はMavenプロジェクトに取り組んでおり、プロジェクト(評価)ルートフォルダの/ targetフォルダに生成および保存されたファイルを無視したいですgitリポジトリのルートには、次のエントリ(バックエンドを持つ.gitignoreファイルがありますEclipseプロジェクトの評価を含む単なるフォルダーです)

backend/Evaluation/logs/
backend/Evaluation/target/

何らかの理由で、SourceTreeはこれら2つのフォルダーに保存されているファイルを無視せず、プロジェクトをコンパイルすると、/ targetフォルダー内のいくつかの.classファイルであるコミットされていない変更があります。

なぜこうなった ?また、.gitignoreエントリを

/ backend/Evaluation/logs/**

しかし、それもうまくいきませんでした。

何か案は ?

62
SteveSt

誤ってリポジトリに追加されたファイルがあるとしましょう:

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
97
larsks

私があなたに答える質問にSourcetreeタグがあるので、Sourcetreeでこれを行う方法、それは本当に簡単です。

前に述べたように、最初に追跡からファイルを削除してから、Sourcetreeにファイルを無視させる必要があります。

  1. ファイル内の何かを変更して表示されるようにするか、開いているリポジトリーの下部にある「ファイル状況」タブから選択します。
  2. ファイルを右クリックすると、「無視...」が表示されますが、上で述べたように、すでにトラックに入っているためグレー表示されます。
  3. ファイルを右クリックし、「追跡の停止」を選択します
  4. ファイルは、(追跡から)削除されることを示す赤いボタンで表示されます
  5. 同じファイルの新しいエントリが「ファイルステータス」に表示され、青い疑問符が新しいファイルを示します(4で追跡から削除すると言ったため、新しい)
  6. 5のファイルを右クリックすると、「無視...」が選択できることがわかります。それをクリックすると、Sourcetreeは.gitignoreファイルにファイルの新しいエントリを追加します
  7. 右上の[設定]をクリックして[詳細]を選択すると、.gitignoreファイルが表示されます。最初のエントリは無視ファイルに関するもので、[編集]をクリックすると開きます。
124
mfgmicha

ファイルが既にGitリポジトリに追加またはコミットされている場合、。gitIgnoreによって無視される前に、まず追跡を停止する必要があります。

SourceTreeでファイルの追跡を停止するには:

ファイルを右クリックします。 [追跡の停止]を選択します。
これはファイルを削除せず、ファイルの追跡を停止するだけです

コマンドラインからのファイルの追跡を停止するには:

git rm --cached example.txt
11
tfmontague

Binフォルダー(フォルダー全体)の追跡に問題がありました。

そのため、ここに簡単な手順を示します(私は視覚的なタイプなので、より視覚的です)。

  1. セキュリティのためだけに、binフォルダー全体を圧縮しました
  2. デスクトップに移動する
  3. (現在の).gitignoreもデスクトップに移動します
  4. BINフォルダー全体を削除する
  5. 変更をコミット(お気に入りのgitコミットツール経由)
  6. コミット、プッシュ、完了!
  7. 基本プロジェクトのフォルダーに戻る
  8. .gitignoreファイルを戻す
  9. オプション-binフォルダーも移動(解凍)します。
  10. その結果、gitツールがbinフォルダーからの変更を追跡していないことがわかります。

これが誰かの助けになることを願っています。

11
Hrvoje

上記の回答に加えて、.gitignoreファイルがルートフォルダーにない場合は機能しないことにも注意してください。

.gitignoreがここにあった/projectname/.gitignoreのプロジェクトがあったため、読まれていませんでした。それで私はそれを/.gitignoreに移動しましたが、すべてうまくいきました。

2
Ibrahim Dauda

リポジトリを削除し、リポジトリが再作成されたときにフォルダに.gitignoreファイルを置くことで、無視ファイルが尊重されることがわかりました。

0
SingleStepper

これは私のために働いた:

git update-index --assume-unchanged some.file
0
Michael

これに数時間苦労し、ここでの提案を含むいくつかのことを試みました-無駄に...最終的に私のために働いたのはbitbucket.org内でリポジトリを設定するときに.gitignoreファイルを作成することでした、そのファイルをローカルにプルし、自分で作成しようとしていたファイルとまったく同じ内容を貼り付け、最終的にすべてが機能するようになりました。

0
ByteMyPixel