Ігнорування каталогів у сховищах Git у Windows


1105

Як я можу ігнорувати каталоги чи папки в Git за допомогою msysgit у Windows?


Ви хочете, щоб папка кеша повністю була виключена з сховища, або просто його вміст?
Гарет

1
Я здогадуюсь, що в ОП є кілька каталогів кешу, вміст яких слід ігнорувати, але хоче переконатися, що ці каталоги створені для тих, хто клонує сховище.
Марк Лонгейр

@Gareth: оскільки порожні папки не відстежуються з git, якщо вміст ігнорується, папка також буде, чи не так?
eckes

3
Я лише згадував, що оскільки деякі люди використовують приховані файли (зазвичай .gitkeep) для позначення каталогу, який слід зберігати
Гарет

2
чи /в кінці, що дає йому знати, що його каталог він повинен ігнорувати?
Чарлі Паркер

Відповіді:


1594

Створіть файл, названий .gitignoreу довіднику вашого проекту. Ігноруйте каталоги, ввівши ім’я каталогу у файл (з додаванням косої риски):

dir_to_ignore/

Більше інформації тут .


130
У вікні cmd-підказки ви можете використовувати "редагувати .gitignore" або "блокнот .gitignore", щоб створити правильний файл.
Джої Грін

44
Або ви також можете використовувати "touch .gitignore" з вікна командного рядка git bash, і це створить правильно названий файл, який потім може бути відредагований блокнотом або подібним ...
SGB

39
Або просто створити файл під назвою .gitignore. з Explorer і відредагуйте його за допомогою блокнота (остання крапка буде видалена). Таким чином, вам не потрібно використовувати командний рядок.
P. Galbraith

6
Або ви могли б vim .gitignore з терміналу. :)
MollyCat

34
Або про те, що дивно не було згадано, навіть якщо це найшвидший спосіб, просто введіть у консолі "echo folder_to_ignore >> .gitignore".
Godsmith

205

За замовчуванням Windows Explorer відобразить .gitignoreфактично ім'я файлу .gitignore.txt.

Git використовувати не буде .gitignore.txt

І ви не можете перейменувати файл .gitignore, оскільки Windows Explorer вважає, що це файл типу gitignore без імені.

Рішення без командного рядка:

Ви можете перейменувати файл на ".gitignore." , і це створить ".gitignore"

46
Це працює? Я завжди просто казав людям відкривати блокнот і в діалоговому вікні "Зберегти як" введіть ім'я файлу, оточене подвійними лапками, так, наприклад, ".gitignore"воно зберігає його, не додаючи розширення автоматично.
Arrowmaster

9
Акуратний. Включно з останнім періодом працює. Провідник знімає останній період, в результаті чого виходить файл під назвою ".gitignore". Я думаю, що метод цитат чистіший, хоча і менше ймовірності створити сюрпризи.
Трайнко

4
Або в діалоговому вікні "Зберегти як" змініть тип файлу на "Усі файли ( . )" - тоді Windows не додасть жодного розширення.
OsakaWebbie

5
або в git bash просто введіть "touch .gitignore" у своїй папці
Rayjax

3
".gitignore."- Це чудова хитрість! У мене також завжди були проблеми .htaccess...
Обмерк Кронен,

105

Здається, що для ігнорування файлів і каталогів існують два основні способи:

  1. .gitignore

    • Розміщення .gitignoreфайлу в корені вашого сховища, крім .gitпапки (в Windows, переконайтеся, що ви побачите справжнє розширення файлу, а потім зробіть .gitignore.(з крапкою в кінці зробити порожнє розширення файлу))
    • Створення глобальної конфігурації ~/.gitignore_globalта запуску git config --global core.excludesfile ~/.gitignore_globalдля додавання цього до вашої конфігурації Git

    Примітка. Файли, відслідковані раніше, можна відстежувати, запустивши git rm --cached filename

  2. Виключення сховища - для локальних файлів, які не потрібно ділитися, просто додайте до нього шаблон або каталог .git/info/exclude. Правила тез не виконуються, тому їх не бачать інші користувачі . Більше інформації тут .

Щоб зробити винятки зі списку ігнорованих файлів, див. Це питання .


36
хороша робота, вказуючи на git rm --cached <filename>. Абсолютно критично ставиться до репостів, які існували до того, як ви створили.gitignore
MaurerPower

2
git rm --cached <ім'я файлу> виправив проблему, з якою у мене виникло .gitignore :)
JeremyFelix

1
Так, найголовніше ім'я файлу - кеш-пам'ять. Це зводило мене з розуму, оскільки git все ще створює файли, які я чітко заявляв, що їх ігнорують (створили gitignore після першої фіксації). Дуже дякую!
Potaito

1
Вирішив мою проблему. Git відстежував папку постачальників у моїй репортажі laravel, хоча я додав папку постачальника в gitignore. Дуже дякую.
Джаянт

44

У мене виникли проблеми зі створенням файлу в Провіднику Windows з .на початку.

Вирішення проблеми полягало в тому, щоб зайти в командну оболонку та створити новий файл за допомогою "редагувати".


2
або просто додати зайве .в кінці, щоб дослідник перестав думати .gitignore- це розширення. Потім при вступі ця крапка без розширення просто з’їдається, і вам залишається .gitignore TL; DR: спробуйте назвати її .gitignore.=> ви закінчите з.gitignore
leerssej

43

Щоб доручити Git ігнорувати певні файли чи папки, вам потрібно створити .gitignoreфайл.

Але в Windows Explorer потрібно вказати ім’я файлу. Ви просто не можете створити файл лише з розширенням. Хитрість полягає в тому, щоб створити порожній текстовий файл і перейти до командного рядка та змінити ім'я файлу на .gitignore:

ren "New Text Document.txt" .gitignore

Тепер відкрийте файл улюбленим текстовим редактором та додайте імена файлів / папок, які ви хочете проігнорувати. Ви також можете використовувати такі символи:*.txt .


15
Або просто: echo dir_to_ignore /> .gitignore
Олівер

2
Або type nul > .gitignoreстворити порожній файл
Castro Roy

Або просто зателефонуйте до файлу, .gitignore.коли розширення файлу не заховані у вашому провіднику Windows
Vairis

22

Якщо ви хочете підтримувати папку, а не файли всередині неї, просто покладіть у папку ".gitignore" файл із вмістом "*" як вміст. Цей файл змусить Git ігнорувати весь вміст із сховища. Але .gitignoreбуде включено у ваше сховище.

$ git add path/to/folder/.gitignore

Якщо ви додасте порожню папку, ви отримаєте це повідомлення (.gitignore - прихований файл)

The following paths are ignored by one of your .gitignore files:
path/to/folder/.gitignore
Use -f if you really want to add them.
fatal: no files added

Отже, використовуйте "-f", щоб змусити додавати:

$ git add path/to/folder/.gitignore -f

19

У Windows є додатковий улов з косою рисою. Виключення одного каталогу в .gitignore за допомогою

dir_to_exclude /

можливо, працюватиме, але виключаючи всі каталоги з

/

викликає проблеми, коли my file.txtу вашому каталозі є назви файлів з пробілами (наприклад ): Git Bash уникає цих пробілів за допомогою зворотної косої риси (як my\ file.txt), а Git для Windows не розрізняє /та \.

Щоб виключити всі каталоги, краще скористайтеся:

** /

Два поспіль зірочки означають вміст каталогу.


15

Також у \.git\infoкаталозі ваших проектів є файл виключення, який фактично те саме, що і .gitignore(я думаю). Ви можете додати файли та каталоги, щоб проігнорувати це.


Мені подобається такий підхід, я просто не можу змиритися зі шляху там, я хочу проігнорувати папку в основному репо, як це зробити?
Шиммі Вайцхандлер

Але ви не повинні залишати файли в .git в спокої (маніпулювати вмістом офіційними засобами)?
Пітер Мортенсен

13

На випадок, якщо вам потрібно виключити підпапки, ви можете використовувати **підстановку, щоб виключити будь-який рівень підкаталогу.

**/build/output/Debug/

12

Для ігнорування цілого каталогу в Git найпростішим способом є включення .gitignore-файлу в цільовий каталог, який просто містить "*".

Показовий приклад,

Приклад системи

/root/
    .gitignore
    /dirA/
        someFile1.txt
        someFile2.txt
    /dirB/
        .gitignore
        someFile3.txt
        someFile4.txt

Мета

  • ігноруйте вміст / dirB /

.Gitignore верхнього рівня (/root/.gitignore)

  • Тут іде ваша стандартна інформація про gitignore

Ігнорований каталог .gitignore (/root/dirB.gitignore)

  • Цей файл просто читається як "*", і каталог повністю ігнорується, сам і всі файли!

І це так просто :)


10

Коли все інше не вдається, спробуйте відредагувати файл

/.git/info/exclude

і додавання потрібних каталогів до кінця файлу, як це:

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
assets/
compiled/

Я додав папки "Активи" та "Скомпільовані" до списку файлів та каталогів, які потрібно ігнорувати.


1
Я використовую Atom в Windows 10. Це працює! Дякую, чувак!
Putu De

Я спробував усі інші з моєю поточною конфігурацією, і це була моя остаточна остаточна відповідь.
Xedret

9

У Unix:

touch .gitignore

У Windows:

echo > .gitignore

Ці команди, виконані в терміналі, створять .gitignoreфайл у поточному місці.

Потім просто додайте до цього .gitignoreфайлу інформацію (наприклад, використовуючи Notepad ++), які файли чи папки слід ігнорувати. Збережіть свої зміни. Це воно :)

Більше інформації: .gitignore



8

У мене виникли деякі проблеми з тим, щоб Git забрав .gitignoreфайл у Windows. $GIT_DIR/info/excludeФайл завжди , здається, працює , хоча.

Мінусом цього підходу є те, що файли в $GIT_DIRкаталозі не включаються до реєстрації, і тому не надаються спільним доступом.

ps, $GIT_DIRяк правило, називається прихована папка.git


Так, git на Windows насправді вигадливий .gitignore - локальний файл виключення робить все, що мені потрібно. Дякую!
andersop

6

Я припускаю, що проблема полягає в тому, що ваше робоче дерево виглядає так:

a-cache/foo
a-cache/index.html
b-cache/bar
b-cache/foo
b-cache/index.html
.gitignore

... з .gitignoreописаним вами. Це дасть git statusвихід:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    .gitignore
#    a-cache/
#    b-cache/

... якщо ці index.htmlфайли ще не були додані в сховище. (Git бачить, що в каталогах кешу є невідомі файли, але він повідомляє лише про каталоги.) Щоб виправити це, переконайтеся, що ви додали та ввели index.htmlфайли:

git add *cache/index.html
git commit -m "Adding index.html files to the cache directories"

... і ваша git statusволя тоді буде виглядати так:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    .gitignore
nothing added to commit but untracked files present (use "git add" to track)

(Очевидно, ви теж хочете взяти на себе зобов’язання .gitignore. Я просто лінувався з цим тестовим випадком.)


1
Ви, мабуть , хочете скористатися .gitignore особливо, тому що ви, ймовірно, хочете відстежувати зміни в ньому, як і ваша команда (якщо ви працюєте з нею). Дивіться stackoverflow.com/a/767213/123033
Дейв Еверітт

2
@Dave Everitt: Саме тому я сказав: "Очевидно, ви також хочете скористатися .gitignore також".
Марк Лонгейр

6

У Windows та Mac, якщо ви хочете ігнорувати папку з назвою Flower_Data_Folder у поточному каталозі, ви можете зробити:

echo Flower_Data_Folder >> .gitignore

Якщо це файл з іменем data.txt:

echo data.txt >> .gitignore

Якщо це шлях на зразок "Дані / passwords.txt"

echo "Data/passwords.txt" >> .gitignore. 

2

У мене були подібні проблеми. Я працюю над ланцюжком інструментів Windows із спільним сховищем із хлопцями Linux, і вони із задоволенням створюють файли з однаковими (крім випадків) іменами у заданій папці.

Ефект полягає в тому, що я можу клонувати сховище і негайно мати десятки "модифікованих" файлів, які, якщо я зареєструвався, створили б хаос.

У мене Windows налаштована на регістр, і Git не ігнорує регістр, але він все ще не працює (мабуть, в Win32 API виклики).

Якщо я gitignore файли, я повинен пам'ятати, щоб не відслідковувати .gitignore файл.

Але я знайшов хорошу відповідь тут:

http://archive.robwilkerson.org/2010/03/02/git-tip-ignore-changes-to-tracked-files/index.html


Здається, посилання розірвано (воно спочатку переспрямовує на версію "https"): "Безпечне з'єднання не вдалося. Під час підключення до archive.robwilkerson.org сталася помилка. PR_END_OF_FILE_ERROR"
Пітер Мортенсен

0

Просто створіть .gitignoreфайл у папці проекту. Потім додайте ім'я папки до нього, наприклад:

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