Ответы:
Не забывайте, согласно gitignore , что существует порядок приоритета в различных «источниках игнорирования шаблонов», которые учитывает Git:
$GIT_DIR/info/exclude
.core.excludesfile
.Последние два могут быть решением вашей проблемы, но:
(См. Также этот вопрос SO )
Два других решения включают обновление index ( git update-index
):
git update-index --assume-unchanged
: см. « Git: отследить файл только в локальном репо и сохранить его в удаленном репо ». git update-index --assume-unchanged
в каталоге ». --no-assume-unchange
для отмены эффекта: См. « Возможно ли, чтобы git add
файл в настоящее время защищен assume-unchanged
? ».Однако, когда вы проверяете другую ветку или когда вы git pull
, этот статус «игнорировать» может быть сброшен. Отсюда другой вариант:
git update-index --skip-worktree
; видеть:
Разница между ними объясняется в « Git - разница между ' assume-unchanged
' и ' skip-worktree
' ».
update-index --skip-work-tree
. Я отредактировал ответ, чтобы добавить несколько ссылок на мои старые ответы, иллюстрирующие эти две update-index
команды.
Если вы можете изменить, .git/info/exclude
вы можете поместить туда те же правила. Но этот файл находится только в вашем локальном репо.
.git
подмодуле нет каталога ...
.git
самом деле находится папка подмодуля parent_repo/.git/modules/submodule_name
. Итак, вы бы отредактировалиparent_repo/.git/modules/submodule_name/info/exclude
Есть три способа указать GIT, какие файлы игнорировать:
.gitignore
файлы$GIT_DIR/.git/info/exclude
core.excludesfile
настройкаПоследние два пункта могут решить вашу проблему.
Для получения дополнительной информации см. Gitignore (5) .
Если вы просто хотите иметь несколько локальных файлов в репозитории, а расположение подкаталога является гибким, вы можете поместить свои файлы, tracked_dir1/tracked_dir2/untracked_dir/
а затем добавить их tracked_dir1/tracked_dir2/untracked_dir/.gitignore
с таким содержимым, как:
*
Т.е.
$ cat > tracked_dir1/tracked_dir2/untracked_dir/.gitignore
*
<Ctrl+D>
Я был в подобных ситуациях, поэтому я добавляю свое предпочтительное решение, о котором я не упоминаю. Проблема git update-index --assume-unchanged
в том, что вы не можете сделать это для неотслеживаемого файла. Ты сказал
Я не могу изменить .gitignore своего репозитория.
Я предполагаю, что вы имеете в виду, что вы не можете вносить какие-либо изменения .gitignore
в origin. Если это так, то вы можете добавить неотслеживаемый файл на свой локальный компьютер .gitignore
, а затем сделайте git update-index --assume-unchanged .gitignore
так, чтобы ваши изменения .gitignore
никогда не передавались. Теперь вы игнорируете (возможно) неотслеживаемый файл и не влияете на удаленный .gitignore
файл.
Игнорировать локальные изменения в отслеживаемых файлах:
git update-index --assume-unchanged my-file.php
Отменить локальные изменения в отслеживаемых файлах:
git update-index --no-assume-unchanged my-file.php
источник: git help update-index
--[no-]assume-unchanged
...
This option can be also used as a coarse file-level mechanism to ignore uncommitted changes in tracked
files (akin to what .gitignore does for untracked files). Git will fail (gracefully) in case it needs to
modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is
changed upstream, you will need to handle the situation manually.
Вы можете использовать глобальный метод gitignore вместо изменения метода в проекте https://help.github.com/articles/ignoring-files/#create-a-global-gitignore
update-index --assume-unchanged
@see stackoverflow.com/a/25253144/292408