.файл gitignore в Sourcetree не работает

Я работаю над проектом maven, и я хочу игнорировать файлы, созданные и сохраненные в /целевой папке моей корневой папки проекта (оценки).В корне моего репозитория git у меня есть.файл gitignore со следующими записями (бэкэнд-это просто папка, содержащая оценку проекта eclipse)

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

по какой-то причине SourceTree не игнорирует файлы, хранящиеся в этих двух папках, и когда я компилирую свой проект, есть некоторые незафиксированные изменения, которые некоторые.файлы классов внутри папки / target.

почему это происходит ? Я также попытался изменить .пример записи для

/ бэкэнд / оценка / журналы/**

но это тоже не сработало.

какие идеи ?

7 ответов


Допустим у нас есть файл, который был случайно добавлен в наш репозиторий:

stackoverflow$ echo this file is important > junkfile
stackoverflow$ git add junkfile
stackoverflow$ git ci -m 'added a file'

в какой-то момент мы понимаем, что файл неважен, поэтому мы добавляем его в наш :

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 игнорировать файл.

  1. измените что-то в файле, чтобы он был показан вам, или выберите его на вкладке "Состояние файла" в нижней части открытого репозитория.
  2. щелкните правой кнопкой мыши на файле и вы увидите "Ignore...", но он серый, потому что, как сказано выше, он уже в пути.
  3. щелкните правой кнопкой мыши на файле и выберите "остановить отслеживание"
  4. файл будет показан с красной кнопкой, которая указывает, что он будет удален (из отслеживания)
  5. новая запись того же файла будет отображаться в "состояние файла" с синим вопросительным знаком указывает на новый файл (новый, потому что вы сказали удалить из отслеживания в 4)
  6. щелкните правой кнопкой мыши на файле от 5 и теперь вы видите " игнорировать..." умеющий выбирать. Нажмите на него, и Sourcetree поместит новую запись для файла в.файл gitignore
  7. вы можете видеть .файл gitignore если вы нажмете " настройка "в правом верхнем углу, выберите" дополнительно", а затем первая запись о файле ignore, нажмите" Изменить", и он будет открыт.

У меня была проблема с отслеживаемой папкой bin (вся папка).

Итак, вот быстрые шаги (более визуальные, поскольку я больше визуальный тип человека):

  1. просто в целях безопасности я сжал всю папку bin
  2. переместить его на рабочий стол
  3. движение (ток) .gitignore на рабочий стол, а также
  4. удалить всю папку BIN
  5. фиксация изменений (через любимый инструмент фиксации git)
  6. Commit, push, готово!
  7. вернитесь в папку базового проекта
  8. шаг назад .файл gitignore
  9. необязательно-переместите назад (распакуйте) папку bin.
  10. в результате вы увидите, что инструмент git больше не отслеживает изменения из папки bin.

надеюсь, это кому-то поможет.


если файлы уже добавлены в репозитории Git, вы должны сначала прекратить отслеживание их, прежде чем они будут проигнорированы .gitIgnore.

чтобы остановить отслеживание файлов в SourceTree:

щелкните правой кнопкой мыши по файлам. Выберите "Остановить Отслеживание".
(это не удалит ваши файлы, он просто перестанет отслеживать их)

чтобы остановить отслеживание файлов из командной строки:

git rm --cached example.txt

В дополнение к ответам уже указано выше, Также обратите внимание, что .gitignore файл не будет работать, если он не находится в корневой папке.

у меня был проект, где .gitignore здесь /projectname/.gitignore и поэтому не читается. Поэтому я переместил его в /.gitignore и все снова было хорошо.


Я нашел это, удалив репозиторий, а затем имея .файл gitignore в папке при воссоздании репозитория файл ignore соблюдается.


это сработало для меня:

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