2016-06-20 4 views
2

Мне нужна доля для обмена определенными файлами между различными проектами. Таким образом, у меня есть файл структуры, как так:Как сделать GIT лечить каталоги как обычные папки в Windows?

D:\shared\ 
D:\shared\files-shared-by-all-projects-here 

D:\project1\ 
D:\project1\project1-specific-files-here 
D:\project1\shared <- directory junction to D:\shared 

D:\project2\ 
D:\project2\project2-specific-files-here 
D:\project2\shared <- directory junction to D:\shared 

У меня есть установки GIT сделок РЕПО в D:\project1 и D:\project2 Моя проблема заключается в том, что ГИТ, кажется, только отслеживать файлы в не-(т.е. соединены в реальных каталогах).

Я использую Visual Studio 2015 для обоих проектов, и это Team Explorer будет вести себя очень странно, когда проект имеет файлы из «соединены в» каталогах:

  • При добавлении файла проживающее в каталоге перехода к проекту, Team Explorer будет показывать только родительский каталог (соединение) в списке изменений для фиксации, а не сам файл.
  • После совершения всех изменений (то есть файлы, которые были добавлены), Решение Explorer показывает всех файлов как отслеживаются и зарегистрированный (в том числе тех, которые находятся в местах соединения и были не показаны в списке ожидающих изменений после того, как они были добавлены:

git1

  • Редактирование файла, который показан как зарегистрированном и пребывает в директории перехода будет делать вид, быть извлеченная:

git2

  • Возвращаясь к Team Explorer Теперь, извлеченная файл показан в списке измененных файлов:

git3

  • Однако попытка выполнить транзакцию с сообщением «Ошибка» произошла. Подробное сообщение: никаких изменений; ничего не совершить «

git4

  • Возвращаясь к Обозревателе решений измененный файл, для которого коммит не удалось, тем не менее показано, как сдаваемый:.

git5

Явное добавление файлы, которые находятся в общем каталоге (т. е. ссылаются на него через D:\project2\shared\some-shared-file) от o Утилита Visual Studio с использованием Tortoise GIT, например, не работает: добавление завершается с сообщением о том, что это файл и каталог.

git6 git7

Выше был сделан с новым тестом-проектом, в котором frame каталога проживающего в корне проекта действительно стык.

В моих реальных проектах, однако, ситуация несколько отличается ... Если я просматриваю репо с использованием Tortoise GIT, то на самом деле он будет показывать общие файлы, находящиеся в перекрестках, как отслеживаемые и зарегистрированные, а также часть репо. Однако, как только я открою проект в Visual Studio, он будет показывать те же файлы в обозревателе решений и в Team Explorer Changes, что и «ожидающее удаление». Так это VS quirck?

Итак, в нижней строке я просто хочу знать, как я могу сделать файлы, находящиеся в перекрестках каталогов, для просмотра как часть проекта наравне с обычными файлами, чтобы они были правильно извлечены и снова зарегистрированы и сформированы часть истории проекта (репо)?

ответ

3

В настоящее время это не поддерживается. Это связано с различием в интерпретации между обработкой соединений между Git для Windows и libgit2, которая является библиотекой Git, которая используется Visual Studio и (частями) TortoiseGit.

Было решено, что обе реализации должныtreat junction points as if they are Unix mount points, однако ни реализация на самом деле делает, что в настоящее время.

В настоящее время Git for Windows относится к ним так, как если бы они были обычными каталогами (и поэтому он может удалить ваш узел и заменить его новым каталогом). libgit2 рассматривает это как символическую ссылку, и в результате Visual Studio отказывается иметь дело с ней вообще.

Поскольку Microsoft необходимо обновить Visual Studio, чтобы исправить это, пожалуйста, сообщите об ошибке в Microsoft Connect и побудить людей голосовать за него в надежде, что она будет исправлена ​​в VS 2015.

+0

Спасибо за четкое объяснение ! Можете ли вы порекомендовать какое-нибудь практическое решение? Или есть не что иное, как создание «общего» репо и вручную фиксировать его время от времени? –

+0

Возможно, есть опция git для переключения? Я устал core.symlinks с истинным и ложным, но это, кажется, ничего не делает. –

+0

Я боюсь, что никакого обходного пути нет, вам нужно будет использовать общий репозиторий, скопировать вручную или использовать подтиповый тип подхода. –