репозиторий git, игнорирующий все .dll

88

Название говорит само за себя. Я пытаюсь добавить свои пакеты NuGet в репозиторий. Обнаруживаются все, кроме файлов .dll.

Файл gitignore не содержит ссылок на * .dll. Файлы .dll не распознаются, если они находятся где-либо во всем репозитории. info / exclude также пуст.

Я также безуспешно клонировал репозиторий (файловую систему в файловую систему, а не удаленную систему в файловую систему). Эта проблема также возникает на двух разных компьютерах.

Я мог бы добавить файлы .dll вручную, но их нужно отслеживать. Почему их не отслеживают?

Пол Кнопф
источник
26
Что git config --get core.excludesfileговорит?
Энтони Хэтчкинс,
2
Также, как правило, не рекомендуется использовать git для отслеживания двоичных файлов, поскольку git не может эффективно вычислять дельты между ревизиями, поэтому сохранение всех версий будет пустой тратой, если место. Если dll генерируются «на лету», лучше просто игнорировать их в git. Если их нет - лучше использовать другой механизм синхронизации (например, rsync).
Энтони Хэтчкинс,
Это пакеты NuGet, которые я пытаюсь добавить в git. Я не использую функцию «Восстановление пакетов» NuGet, поэтому мне нужно зарегистрировать всю папку пакетов.
Пол Кнопф,

Ответы:

121

У вас есть ~/.gitignore_globalили ~/.gitignoreв вашем домашнем каталоге, где также могут быть перечислены эти шаблоны файлов?

См. Https://help.github.com/articles/ignoring-files.

Стюарт М
источник
6
Учитывая, что он работает с файлами dll, он работает на платформе Windows, поэтому ~ означает $ HOMEDRIVE $ HOMEPATH под Windows 7
Энтони Хэтчкинс,
9
Это оказалось проблемой. Однако я не добавлял этот глобальный файл игнорирования. Есть ли причина, по которой он просто появляется из ниоткуда? Теперь, когда я подумал об этом, я недавно установил SourceTree (от Atlassian). Может в этом виноват?
Paul Knopf
6
У меня была такая же проблема, я также установил SourceTree до этого. Поэтому я думаю, что SourceTree добавил глобальный файл игнорирования, поскольку он работал раньше.
Андреас Кребс
8
Изменить: ОК, это добавлено ссылкой
Андреас Кребс
31
Мне пришлось бежать, git check-ignoreчтобы узнать, где находится файл. Люблю это ~ / Documents / gitignore_global.txt
Мэтт Кэнти,
98

Если вы используете SourceTree и настройку по умолчанию, он будет игнорировать все библиотеки DLL по умолчанию ... Инструменты => Параметры => Git, затем "Редактировать файл" ... добавить "#" перед .dll => "# .dll" .. . сохрани и закрой.

Затем в проводнике Windows в папке пакетов откройте терминал GitBash и введите «git add». и дайте ему поработать, вернитесь в SourceTree, подождите секунду, и все эти недостающие библиотеки DLL появятся, чтобы вы могли зафиксировать и отправить.

KevinB
источник
13
Правильный ответ для пользователей SourceTree;)
jmpcm 03
Знал о глобальном списке игнорирования, не смог найти его в графическом интерфейсе .. Спасибо!
Кристоф
Инструменты => Параметры => Git / Mercurial Global Ignore List ... Если у вас его нет, вы можете создать и указать на него там.
KevinB
2
Расположение файла: ~ / Documents / gitignore_global.txt
Джеймс МакКормак,
Это сработало для дерева исходного кода, но как для визуальной студии игнорирование не было в моем gitignore. Все, что я использовал для этой задачи,
Demodave
11

Я мог бы добавить файлы .dll вручную, но их нужно отслеживать. Почему их не отслеживают?

Нет, их не следует отслеживать, если вы их не добавили. Отслеживаются только файлы, которые уже добавлены и зафиксированы; вот что означает «отслеживаемый».

Попробуйте вручную добавить один из них через, git addи он скажет вам, почему он их игнорирует, и предложит вам использовать git add -fдля добавления файла в любом случае.

Meagar
источник
Я сделал «git add '/ packages'», и он не обнаружил .dll. Затем я использовал -f, и он добавил его. Но я нашел проблему. "* .dll" был в моем глобальном игноре. Понятия не имею, откуда взялось это глобальное игнорирование.
Paul Knopf
2

Вам нужно явно указать git отслеживать любые новые файлы.

  1. Выполните, git add filenameчтобы добавить файл в индекс git.

  2. Выполните, git commitчтобы зафиксировать изменения в вашем индексе.

git status должен также показать список неотслеживаемых файлов и каталогов.

Если вы хотите перечислить все файлы в репо, которые игнорируются gitignore, вы можете запустить:

git ls-files . --ignored --exclude-standard --others

Если вы хотите перечислить все неотслеживаемые файлы в репо:

git ls-files . --exclude-standard --others
Tuxdude
источник
2
Мне пришлось «git add -f» отслеживать файлы, которые фактически были проигнорированы. Оказалось, что это была запись в глобальном файле игнорирования, которую какое-то приложение поместило туда по моему незнанию.
Paul Knopf
2

Я столкнулся с подобной проблемой. Я не могу добавить файл .dll из каталога пакета в свой git, тогда я обнаружил файл gitignore_global.txt, поскольку sourcetree автоматически добавил этот файл в качестве глобального параметра игнорирования git. Я удалил * .dll из файла gitignore_global.txt, и у меня все нормально.

Расположение файла gitignore_global.txt, как показано ниже

C: \ Users \ XXXX \ Documents \ gitignore_global.txt или вы можете найти его из sourcetree TOOL => OPTION => вкладка GIT и узнать глобальный список игнорирования

Нирадж Триведи
источник
1

В моем случае в файле .gitignore не было ссылок на .dll, и у меня не было глобального файла. Однако в подкаталоге .git я нашел файл с именем ms-persist.xml. Я закрыл все экземпляры Visual Studio, а затем вручную добавил в этот файл отсутствующие .dll. Когда я снова открыл визуальную студию, файлы .dll показывались как требующие возврата. Я зарегистрировал их, и теперь я золотой ...

Кертис
источник
0

У вас есть глобальный .gitignoreгде-то или другие .gitignoreфайлы в подкаталогах - относительно корня вашего проекта.

В системах Linux и MacOS глобальный git-ignore, скорее всего, находится у вас дома ~/

~/.gitignore_global

В Windows он, скорее всего, находится в вашем пользовательском каталоге. Либо ваш локальный пользователь (который вы можете узнать, набрав ECHO %USERPROFILE%или whoamiв командной строке.

Если его там нет, то .gitconfigвместо него наверняка присутствует a . Найдите здесь расположение gitignore (например, Documentsпапку пользователя).

Изменить : используйте, git config --list --show-originчтобы получить подробную информацию о дополнительных настройках git и их соответствующих расположениях файлов.

Лоренц Ло Зауэр
источник
0

Я знаю, что этот вопрос очень старый, но я добавляю его для других, которые могут посетить этот вопрос в будущем. Вы можете изменить свой глобальный файл игнорирования, как указано выше, но это повлияет на ВСЕ ваши репозитории git. Если вместо этого вам нужен более детальный подход, вы можете просто исключить либо определенные библиотеки DLL, либо определенные папки в вашем отдельном проекте .gitignores. Это отменяет все настройки игнорирования и заставляет git обнаруживать и обрабатывать файлы. Я думаю, это лучший подход.

.gitignore (для вашего конкретного проекта)

# Custom ignores
!*.dll
# or
!My.specific.dll

# rest of .gitignore
jp36
источник