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 не работает, потому что "Невозможно повторно включить файл, если исключен родительский каталог этого файла" [ источник ].

В качестве уродливого, но работающего обходного пути, сделайте это на каждом уровне каталогов на пути к вашему файлу:

  1. исключить все содержимое каталога
  2. повторно включите подкаталог, ведущий к вашему файлу (или, наконец, к вашему файлу).

Ваши записи будут выглядеть следующим образом, в каждом двухстрочном разделе эти шаги выполняются для одного уровня иерархии каталогов:

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