Примушуйте додавати, незважаючи на файл .gitignore


413

Чи є спосіб змусити gitдодати файл, незважаючи на .gitignoreфайл?


4
Питання може бути краще - чому ви хочете це зробити? Якщо ви хочете відслідковувати файл, скасуйте його (приставте його шаблон у .gitignoreфайлі !, наприклад !dont/ignore/this/file).
Охад Шнайдер

6
@OhadSchneider Це корисно, якщо ви змушуєте фіксувати файли збирання в іншій гілці. Кілька проектів роблять це, наприклад, StrongLoop для безпечного розгортання
Deminetix

5
@OhadSchneider Для нас це більше, тому що більшість розробників встановлюють git за допомогою Visual Studio 2015, що додає глобальну gitignore до папки користувача. Це виключає такі файли, як * .dll та * .exe. Це чудово підходить для наших нових проектів, які використовують лише пакети нугів, які витягуються під час збирання, але для невеликої кількості старих проектів ми все ще використовуємо DLL, на які вручну посилаються рішення. Для цих проектів ми хотіли б їх включити вручну, замість того, щоб говорити кожному розробнику прокоментувати файли * .dll та * .exe у глобальному gitignore.
Нуллій

4
@Nullius Ви не можете просто скасувати їх на більш високому рівні .gitignore(скажімо, додати .gitignoreв ту ж папку, що і dll, або одну вище, чи щось)?
Охад Шнайдер

Відповіді:


569

Дивіться man git-add:

   -f, --force
       Allow adding otherwise ignored files.

Тож запустіть це

git add --force my/ignore/file.foo

11
Ум, що не працює, у статусі git файл все ще не відображається
Марк

5
Що ж, я перевірив це, щоб переконатися, що він справді працює, і він працює. Чи можете ви описати своє оточення (ОС, версія git ...)? Це те, що я в основному зробив: echo "/foo" >> .gitignore; echo "bar" > foo; git add foo # should throw an error; git add -p foo # works(не можу вставити нові коментарі в коментарях, виконайте команди 1 на 1
Daniel Böhmer

4
Зі мною трапилось те саме, я раніше запускав git update-index - не змінюється у своїх файлах. Мені довелося скасувати його - не припустити-не змінити, і це спрацювало
Яко

4
Це працює лише для мене, використовуючи подстановочні символи, використовуючи git 1.9.5 для Windows, навіть після спроби - ні - припустимо - без змін. "git add - f <ім'я файлу>" нічого не робить, але "git add -f *" працює. Використання TortoiseGit також працює.
mhenry1384

@ mhenry1384 Причина того, що вона працює для підстановки лише в Windows, може бути пов’язана з тим, як використовується роздільник шляху. Для мене слэш "/" працює, але зворотний косий нахил "\" не відповідає. Той факт, що cmd / PowerShell перетворює "/" в "\" для нас, полегшує натхнення.
ой

19

Незважаючи на робоче рішення Даніеля Бьомера, в коментарі Охад Шнайдер запропонував краще рішення:

Якщо файл, як правило, ігнорується, і ви змушуєте його додавати - він може бути випадково повторно проігнорований у майбутньому (наприклад, коли файл видалений, тоді робиться фіксація і файл створюється заново.

Вам слід просто скасувати ігнорування у файлі .gitignore так: Unignore підкаталогів ігнорованих каталогів у Git


4
Це вірно. Я використовував параметр --force для невеликих файлів даних, а потім переставив трохи структури папок і закріпив усі файли, що відслідковуються. ТАКОЖ: при .gitignoreвикористанні !specific-file-name.txtбез ієрархії папок цей спосіб відстеження буде слідувати за файлом навколо репо.
Мерлін

Це залежить від сценарію, наприклад, коли-небудь ви хочете виключити "1.txt" у всіх папках, а колись "folder1 / *. Txt"
AS

14
Це не «краще» рішення. Це вирішення іншої проблеми.
aij

2

Іншим способом її досягнення буде тимчасове редагування файлу gitignore, додавання файлу та повернення назад gitignore. Трохи хакі, я відчуваю


10
Я згоден, це не те, що ти хочеш робити.
Мерлін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.