Відповіді:
На думку gitignore , не забувайте, що в різних "джерелах ігнорування шаблону" існує порядок пріоритетності, який Git вважає:
$GIT_DIR/info/exclude
.core.excludesfile
.Останні два можуть бути вирішенням вашої проблеми, але:
(Дивіться також це питання ТАК )
Інші два рішення включають оновлення індексу ( 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
до походження. Якщо це так, ви можете додати незавершений файл до свого локального .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