У меня есть каталог tmp в моем репозитории git, который я хотел бы по-прежнему существовать, но игнорировать. Я добавил его .gitignore
, но git status
все еще сообщает мне об изменениях в файлах в этом каталоге. Я пробовал git rm -r --cached
, но это удаляет его из удаленного репо. Как я могу перестать отслеживать изменения в этом каталоге, но при этом позволить ему существовать? Мне также нужно сделать это для 1 файла, но изменения в нем также появляются git status
после .gitignore
них. Что я должен делать?
git
version-control
21312312
источник
источник
Ответы:
Вместо этого
.gitignore
вы можете обновить локальный репозиторий git, выполнив следующую команду:В этом случае файл отслеживается в исходном репо. Вы можете изменить его в своем локальном репо, и git никогда не пометит его как измененный. Подробнее на:
источник
git update-index --no-assume-unchanged <file>
. Если хотите их перечислитьgit ls-files -v | grep '^h'
.Игнорирование изменений, внесенных в файлы, при сохранении возможности их существования - вот точная цель
.gitignore
. Так что добавить файлы (или каталоги).gitignore
- это единственное, что вам нужно сделать.Но ваша проблема в том, что git уже отслеживает файлы, которые вы хотите игнорировать, и
.gitignore
не применяется к отслеживаемым файлам. Единственный способ остановить это отслеживание - приказать git удалить их. Используяgit rm --cached
, вы запрещаете git удалять ваши локальные файлы, но любой другой репозиторий, получающий ваши изменения, применит удаление. Я не думаю, что есть способ избежать этого из вашего собственного репозитория. Вы должны сделать что-то в других репозиториях, иначе файлы будут удалены.Чтобы предотвратить удаление друг от друга репозиториев, вы можете:
git rm --cached
файлы и зафиксируйте перед тем, как вытащить свои изменения. Git красиво объединит два удаления, не затрагивая уже неотслеживаемые файлы.источник
git update-index --assume-unchanged <file>
. Взгляните на: blog.pagebakers.nl/2009/01/29/…git rm --cached <filename> -r
и после этого push снова изменит репозиторий, чтобы файл был удаленПоместите
/
в конец имени каталога в вашем.gitignore
файле, т.е.Если вы отслеживали файлы внутри этого каталога, вам нужно сказать git, чтобы он сначала забыл о них (перед тем, как добавить каталог в список игнорирования). Предполагая, что у вас там нет ничего жизненно важного (то есть вы можете поцарапать):
Новые файлы в этом каталоге не будут отслеживаться.
--cached
Вариантgit rm
работает только по индексу ( в ожидании изменения более или менее). Это не влияет на рабочее дерево или статус того, что отслеживалось или нет.источник
the/dir/
иthe/dir/*
.gitignore не влияет на отслеживаемые файлы.
Что вы хотите, так это установить бит без изменений для файлов в каталоге tmp /. Здесь есть хорошее объяснение, как это сделать: Git: отследить файл только в локальном репо и сохранить его в удаленном репо
Кроме того, однострочные параметры для установки без изменений для всех файлов в каталоге - git update-index --assume-unchanged для каталога .
источник
Похоже, вы пытаетесь отследить файл (например
index.php
), добавить его в удаленный репозиторий, а затем перестать следить за ним, сохраняя при этом файл на удаленном компьютере (т.е. оставлятьindex.php
неизменным на удаленном репозитории, изменяя его локально).Насколько я понимаю, git не может этого сделать. Вы можете либо отслеживать файл, либо нет. Если вы отслеживаете файл, он существует в удаленном репо и изменяется при фиксации изменений в нем. Если вы не отслеживаете файл, он не существует в удаленном репо.
Поскольку с помощью git невозможно сделать именно то, что вы хотите, потенциально существуют другие решения, в зависимости от конкретной ситуации. Например, почему вы не хотите
index.php
изменять удаленно, когда вы меняете его локально? Есть ли в файле настройки для конкретного пользователя? В этом случае вы можете:Теперь отредактируйте index_template.php так, чтобы он отображался в удаленном репо. Добавьте что-нибудь в свой README, чтобы сообщить людям, использующим ваш репозиторий, что после клонирования они должны скопировать index_template.php в index.php и отредактировать его в соответствии со своими потребностями.
Когда кто-то клонирует ваше репо, он должен создать свое собственное
index.php
. Вы сделали это легко для них: просто скопироватьindex_template.php
вindex.php
и пересмотреть его с настройками компьютера специфическими.источник