Подтвердить что ты не робот

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

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

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

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

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

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

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

Любые идеи?

4b9b3361

Ответ 1

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

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

Ответ 2

Поскольку в вопросе есть тег Sourcetree, я отвечу вам , как это сделать с Sourcetree, это действительно просто.

Как уже говорилось, сначала нужно удалить файл из отслеживания, а затем заставить Sourcetree игнорировать файл.

  • Измените что-нибудь в файле так, чтобы оно было показано вам, или выберите его на вкладке "статус файла" внизу открытого репозитория.
  • Щелкните правой кнопкой мыши по файлу, и вы увидите "Игнорировать...", но он неактивен, потому что, как сказано выше, он уже находится в треке.
  • Щелкните правой кнопкой мыши файл и выберите "Остановить отслеживание"
  • Файл будет отображаться красной кнопкой, которая указывает, что он будет удален (от отслеживания).
  • Новая запись того же файла будет отображаться в "статусе файла" с голубым вопросительным знаком, указывающим новый файл (новый, потому что вы сказали удалить из отслеживания в 4)
  • Щелкните правой кнопкой мыши на файле с 5 и теперь вы видите, что "Игнорировать..." может выбрать. Нажмите на него, и Sourcetree поместит новую запись для файла в файл .gitignore
  • Вы можете увидеть файл .gitignore, если вы нажмете "Настройка" в верхнем правом углу, выберите "расширенный", а затем первая запись о файле игнорирования, нажмите "изменить" и он будет открыт.

Ответ 3

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

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

  • Только для целей безопасности я застегнул всю папку bin
  • Переместить его на рабочий стол
  • Переместить (текущий) .gitignore на рабочий стол, а также
  • Удалить всю папку BIN
  • Заблокировать изменения (с помощью любимого инструмента git commit)
  • Commit, push, done!
  • Вернитесь в базовую папку проекта
  • Верните файл .gitignore
  • Дополнительно - отмените (распакуйте) папку с бункером.
  • В результате вы увидите, что инструмент git больше не отслеживает изменения из папки bin.

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

Ответ 4

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

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

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

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

git rm --cached example.txt

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

В течение нескольких часов боролся с этим, пробовал несколько вещей, в том числе и предложения здесь - безрезультатно... что в итоге мне помогло - создать файл .gitignore при настройке репозитория в bitbucket.org, вытащил этот файл в мой локальный, вставил то же самое содержимое файла, который я пытался создать самостоятельно, и теперь все наконец работает.