GIT клон репо через локальную файловую систему в Windows

197

Я полный Noob, когда дело доходит до GIT. За последние несколько дней я делал первые шаги. Я настраивал репо на своем ноутбуке, вытащил Trunk из проекта SVN (имел некоторые проблемы с ветвями, не получил их работу), но все вроде хорошо.

Теперь я хочу, чтобы можно было тянуть или отталкивать от ноутбука до моего основного рабочего стола. Причина в том, что ноутбук удобен в поезде, поскольку я провожу 2 часа в день, путешествуя и могу получить хорошую работу. Но моя главная машина дома отлично подходит для развития. Поэтому, когда я прихожу домой, я хочу, чтобы я мог нажать/вытащить из ноутбука на главный компьютер. Я думал, что самый простой способ сделать это - просто иметь общую папку кода по локальной сети и делать:

git clone file://192.168.10.51/code

К сожалению, это, похоже, не работает для меня:

поэтому я открываю git bash cmd и набираю приведенную выше команду, я нахожусь в C:\code (общая папка для обеих машин), это то, что я возвращаю:

Initialized empty Git repository in C:/code/code/.git/
fatal: 'C:/Program Files (x86)/Git/code' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

Как я могу поделиться репозиторием между двумя машинами самым простым способом.

Там будут другие местоположения, которые станут официальными точками хранения и местами, где будут работать другие разработчики и сервер CI и т.д. Это просто так, что я могу работать с одним и тем же репо на двух машинах.

В соответствии с предложением Себастьяна я получаю следующее:

C:\code>git clone --no-hardlinks file://192.168.10.51/code
Initialized empty Git repository in C:/code/code/.git/
fatal: 'C:/Program Files (x86)/Git/code' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

** РЕДАКТИРОВАТЬ - ОТВЕТ **

Спасибо всем, что помогло. Я попробовал сопоставление диска, и это сработало, поэтому я подумал, что вернусь и повторю попытку без сопоставления. Конечный результат:

git clone file://\\\\192.168.0.51\code

Это сработало отлично.

Спасибо

  • 0
    file: //192.168.10.51/code ни в коем случае не является допустимым URI, указывающим на файл, тогда как file: // C: \ foo \ bar.txt
  • 0
    Тогда как я могу указать на удаленный компьютер с такой ссылкой?
Показать ещё 3 комментария
Теги:
git-clone

7 ответов

169
Лучший ответ

Вы можете указать URL-адрес пультов, применяя путь UNC к файловому протоколу. Для этого необходимо использовать четыре слэша:

git clone file:////<host>/<share>/<path>

Например, если ваша основная машина имеет IP 192.168.10.51 и имя компьютера main, и у нее есть общий ресурс с именем code, который сам является репозиторием git, тогда обе следующие команды должны работать одинаково:

git clone file:////main/code
git clone file:////192.168.10.51/code

Если репозиторий git находится в подкаталоге, просто добавьте путь:

git clone file:////main/code/project-repository
git clone file:////192.168.10.51/code/project-repository
  • 2
    Есть ли способ аутентификации (т.е. имя пользователя / пароль) с этой схемой?
  • 0
    Привет, это было почти там, я отредактировал свой вопрос, чтобы показать окончательный результат
Показать ещё 9 комментариев
119
$ git clone --no-hardlinks /path/to/repo

Вышеупомянутая команда использует нотацию пути POSIX для каталога с вашим репозиторием git. Для Windows это (каталог C:/path/to/repo содержит каталог .git):

C:\some\dir\> git clone --local file:///C:/path/to/repo my_project

Репозиторий будет клонирован к C:\some\dir\my_project. Если вы опустите file:/// часть, то подразумевается опция --local.

  • 6
    Это сработало для путей к файлам с пробелами: git clone -l file: // "C: \ SOME PATH \ WITH SPACES" my_project
  • 1
    Большая помощь. Это работает для меня на моем компьютере с Windows 7. <из командной строки git bash> что-то вроде: git clone file: /// C: / Users / username / repsitoryName
Показать ещё 2 комментария
14

ответ с именем хоста не работал у меня но это произошло:

git файл клона:////home/ git/repositories/MyProject.git/

  • 1
    Похоже, у вас слишком много косых черт после «file:». Для меня магическое число составило 3 слеша
  • 0
    Три - это магическое число, но подойдет и любое большее.
Показать ещё 2 комментария
6

Мне удалось сделать это, используя файл://, но с одним дополнительным косой чертой для обозначения абсолютного пути.

git clone file:///cygdrive/c/path/to/repository/

В моем случае я использую Git в Cygwin для Windows, который вы можете увидеть из-за части /cygdrive/c на моих путях. С некоторой настройкой на путь он должен работать с любой установкой Git.

Добавление удаленного объекта работает одинаково

git remote add remotename file:///cygdrive/c/path/to/repository/
6

Возможно, сопоставьте общий ресурс как сетевой диск, а затем выполните

git clone Z:\

В основном просто догадка; Я всегда делаю это с помощью ssh. Конечно, это будет означать, что вам нужно будет отображать этот диск каждый раз, когда вы нажимаете/тянете/с ноутбука. Я не уверен, как вы устанавливаете ssh для работы под окнами, но если вы собираетесь делать это много, возможно, стоит изучить.

  • 2
    мерзавец клон Z: (без слеша) работал идеально для меня
  • 0
    @Carlos: Я думаю, что это сработает только в том случае, если у вас нет cd 'd в другой каталог на диске Z: . IIRC; Я давно не был пользователем Windows. Также может случиться так, что git интерпретирует буквы диска иначе, чем стандартное соглашение Windows. Вы пробовали `Z:`?
Показать ещё 2 комментария
3

Не уверен, что это из-за моей версии git (1.7.2) или что-то, но перечисленные выше методы с использованием имени машины и IP-параметров не работали для меня. Дополнительная информация, которая может/не может быть важна, заключается в том, что репо было голой репо, которую я инициализировал и выталкивал с другой машины.

Я пытался клонировать проект1, как описано выше, с помощью команд типа:

$ git clone file:////<IP_ADDRESS>/home/user/git/project1
Cloning into project1...
fatal: '//<IP_ADDRESS>/home/user/git/project1' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

и

$ git clone file:////<MACHINE_NAME>/home/user/git/project1
Cloning into project1...
fatal: '//<MACHINE_NAME>/home/user/git/project1' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

Что работало для меня, было что-то более простое:

$ git clone ../git/project1
Cloning into project1...
done.

Примечание. Несмотря на то, что клонированный репо был голым, это создало "нормальный" клон со всеми фактическими файлами кода/изображения/ресурсов, на которые я надеялся (в отличие от внутренних репо git).

1

Введите абсолютные пути или относительные пути.

Например, первый из них использует абсолютные пути:

(это изнутри папки, содержащей репозиторий и резервную копию, как вложенные папки. Также помните, что папка резервного копирования не изменяется, если она уже содержит что-либо, а если она отсутствует, будет создана новая папка)

~/git$ git clone --no-hardlinks ~/git/git_test1/   ~/git/bkp_repos/

Далее используются относительные пути:

~/git$ git clone --no-hardlinks git_test1/   bkp_repos2/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню