Git игнорировать исключение не работает по желанию
WinXP + mysisGit1.7
В моем .gitignore файле, но все еще не отображается Demos/path/to/file/file.cpp
, который отслеживается git.
У меня есть следующие записи:
Demos/
!Demos/path/to/file/file.cpp
Абсолютный путь: c:\Project\Demos\path\to\file\file.cpp
Что может быть неправильным? Пожалуйста, помогите, спасибо.
EDIT:
Я нашел способ, которым работает mysisGit .gitignore в WindowsXP, может игнорировать только определенный тип файла, а затем исключать некоторые файлы одного типа. Например:
*.bak
!tracking.bak
!/path/to/file/tracking2.bak
Не работает папка ignore и исключает некоторые файлы в этой папке. Ниже не будет работать:
/folderUnderRepoRoot/
!/folderUnderRepoRoot/tracking.cpp
Нор
anyFolderNamedLikeThis/
!anyFolderNamedLikeThis/tracking.cpp
!/anyFolderNamedLikeThis/tracking.cpp
Однако я обнаружил, что есть исключение. Там обходной способ исключить файлы прямо под игнорируемой папкой (а не в свою подпапку). Это работает.
/folderUnderRepoRoot/*
/folderUnderRepoRoot/tracking.cpp
Но этот способ ограничен только тогда, когда файл не находится в какой-либо вложенной папке, поэтому он не так полезен.
Таким образом, я в конечном итоге все еще беру на себя большинство исходных файлов, даже меня интересовали только несколько файлов при отслеживании других крупных проектов. Это означает, что есть куча файлов, на которые я не буду касаться, но все равно нужно их зафиксировать.
Вот другой поток, который имел схожую проблему.
Ответы
Ответ 1
Ваше исключение .gitignore
не работает, потому что "Невозможно повторно включить файл, если исключен родительский каталог этого файла" [ источник ].
В качестве уродливого, но работающего обходного пути, сделайте это на каждом уровне каталогов на пути к вашему файлу:
- исключить все содержимое каталога
- повторно включите подкаталог, ведущий к вашему файлу (или, наконец, к вашему файлу).
Ваши записи будут выглядеть следующим образом, в каждом двухстрочном разделе эти шаги выполняются для одного уровня иерархии каталогов:
Demos/**
!Demos/path/
Demos/path/**
!Demos/path/to/
Demos/path/to/**
!Demos/path/to/file/
Demos/path/to/file/**
!Demos/path/to/file/file.cpp
Обратите внимание, что первая строка не является Demos/
, в отличие от того, что пытался задать автор вопроса. Это родительский каталог нашего файла, поэтому мы должны были бы включить его сразу после этого - значит, нам не нужно исключать его в первую очередь. Вместо этого мы начинаем с исключения его содержимого: Demos/**
.
Ответ 2
Добавьте к .gitignore
следующее:
folderUnderRepoRoot/**/*
!folderUnderRepoRoot/tracking.cpp
Но убедитесь, что хотя бы один файл добавлен в индекс git из папки folderUnderRepoRoot
.
Ответ 3
Вы можете попробовать заменить его на !/Demos/path/to/file/file.cpp
(обратите внимание на начальную косую черту после восклицательного знака) и повторите попытку?
Ответ 4
Если это всего лишь один файл, я бы обычно не изменял .gitignore
Ниже следует игнорировать .gitignore
и разрешить вам добавлять файл
git add -f Demos/path/to/file/file.cpp