Пути git и Cygwin с SourceTree

Я установил cygwin на сервер Windows исключительно для использования ssh.

Кроме того, я установил Git для Windows, отказавшись от использования Cygwin git, поскольку он не поддержка расширений windows.

У меня есть пользователь git ssh, который может войти в систему (через ssh) и может создавать репозитории в домашнем каталоге этого пользователя. Это позволяет мне нажимать на сервер из OSX с запущенным SourceTree. В этом случае репозиторий находится с: -

git@GitServer:Repos/Project.git

Фактический путь к папке под cygwin: -

/cygwin/home/git/Repos/Project.git       

Однако я хочу иметь возможность разместить каталог Repos непосредственно в корне папки cygwin, а не в домашней папке: -

/Repos/Project.git

Это приводит к сбою SourceTree при попытке отправить репозиторий. Я определяю путь следующим образом: -

git@GitServer:/Repos/Project.git

Я также проверил разрешения на папки, и это не проблема.

Сбой приводит к следующему сообщению: -

fatal: '/Repos/Project.git' не является репозиторием git

fatal: Не удалось прочитать из удаленного репозитория.

Убедитесь, что у вас есть правильные права доступа и репозиторий существует.

Я могу понять, что у меня были бы проблемы, если бы репо было помещено за пределы папки cygwin, но если бы его нельзя было поместить в корень, и может ли кто-нибудь объяснить, как я могу получить путь SourceTree для доступа к репо, если он размещен в корне, без создания символических ссылок?


person TheDarkKnight    schedule 19.06.2014    source источник
comment
Вам действительно не нужен cygwin: используйте openssh, встроенный в дистрибутив Git для Windows (msysgt): stackoverflow.com/a/19534485/ 6309   -  person VonC    schedule 19.06.2014
comment
@VonC, из всей документации, которую я прочитал, я могу найти только то, как использовать msysgit ssh для подключения к другим серверам. Как мне настроить сервер Windows с помощью msysgit ssh для получения соединений? Я настраиваю главный репозиторий git.   -  person TheDarkKnight    schedule 19.06.2014
comment
Спасибо, но настройка ssh-сервера не проблема, это отвлекает от первоначального вопроса.   -  person TheDarkKnight    schedule 19.06.2014
comment
Что такое сообщение об ошибке SourceTree при попытке доступа к /Repos/Project.git через ssh?   -  person VonC    schedule 19.06.2014
comment
@VonC, к вопросу добавлена ​​ошибка. Как будто пользователь не может выйти из своего домашнего каталога. Вход по ssh сразу показывает, что это не так.   -  person TheDarkKnight    schedule 19.06.2014
comment
ssh git@GitServer работает? ssh git@GitServer ls /Repos? Если нет, что возвращает ssh -Tvvv git@GitServer?   -  person VonC    schedule 19.06.2014
comment
Да, ssh git@GitServer ls /Repos отображает правильный результат; Проект.git   -  person TheDarkKnight    schedule 19.06.2014
comment
Просто чтобы проверить, будет ли URL-адрес типа ssh://git@GitServer/Repos/Project.git работать лучше для SourceTree?   -  person VonC    schedule 19.06.2014
comment
Нет, это тоже не работает ;О(   -  person TheDarkKnight    schedule 19.06.2014
comment
Странно, поскольку / является допустимым путем: stackoverflow.com/q/12311440/6309. Все еще изучаю это.   -  person VonC    schedule 19.06.2014
comment
Точно. Я действительно не понимаю, почему это не должно работать. Спасибо, что изучили это вместе со мной. Я подозреваю, что это может быть как-то связано с тем, как SourceTree обрабатывает путь.   -  person TheDarkKnight    schedule 19.06.2014
comment
Я бы начал с поиска в Cygwin содержимого /etc/sshd_config, чтобы увидеть, есть ли опция, которая не позволяет ssh-клиенту получить доступ к /. Просто чтобы быть уверенным, я бы проверил, могу ли я выполнить из клиента ssh git@GitServer ls /Repos/Project.git (также убедитесь, что регистр правильный).   -  person VonC    schedule 19.06.2014
comment
Проверьте также журналы Cygwin sshd: cat /var/log/sshd.log (как показано в stackoverflow.com/q/12319215/6309)   -  person VonC    schedule 19.06.2014
comment
Спасибо, сделаю и вернусь к вам. ssh git@GitServer ls /Repos/Project.git работает как положено.   -  person TheDarkKnight    schedule 19.06.2014
comment
Журнал cygwin sshd пуст.   -  person TheDarkKnight    schedule 19.06.2014
comment
Возможно, журнал не активирован в /etc/sshd_config   -  person VonC    schedule 19.06.2014
comment
Несколько интересных руководств для перепроверки: cforcoding .com/2009/09/windows-git-tutorial-cygwin-ssh-and.html, ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/, tsengf.blogspot.fr/2011/06/   -  person VonC    schedule 19.06.2014
comment
В первой статье упоминается, что вы должны использовать cygwin, а затем это не обсуждается. Второй описывает, как я уже настроил систему, но я не мудрее. Все равно спасибо.   -  person TheDarkKnight    schedule 20.06.2014
comment
Я никогда не видел столько комментариев без единой попытки ответить :o   -  person Theodore R. Smith    schedule 31.12.2014
comment
Я боролся с этой проблемой. слишком. Я хочу поместить свое репо в /cygdrive/d/Git, но после настройки я не могу его клонировать, точно такое же сообщение, как и OP. Я могу создавать рабочие репозитории в своей домашней папке, но не за ее пределами. Кто-нибудь понял это?   -  person brock    schedule 03.07.2020


Ответы (1)


Итак, у вас есть каталог с репозиториями Git, размещенными в корневом каталоге Cygwin. Я ожидаю, что корневой каталог вашего Cygwin — c:\cygwin, поэтому каталог с репозиторием Git — c:\cygwin\Repos\Project.git. Корневой каталог Cygwin монтируется как / в Cygwin, поэтому каталог вашего репозитория Git — /Repos/Project.git.

SourceTree — это собственное приложение Windows .NET, поэтому оно использует файловую систему Windows и пути в стиле Windows. Поэтому, если вы сказали SourceTree искать репозиторий Git в /Repos/Project.git, он пытался найти его в c:\Repos\Project.git, что явно неверно. Просто укажите правильный путь Windows в SourceTree, и все заработает.

То же самое для любого приложения Windows. Путь Cygwin понимается только приложениями Cygwin. Вы можете использовать cygpath для преобразования путей Cygwin в Windows и наоборот. Эта команда, например, открывает текущий каталог в Cygwin в проводнике Windows:

explorer `cygpath -wa .`

Также репозиторий может быть размещен где по вашему желанию, конечно, он не обязательно должен находиться в корневом каталоге Cygwin. Это может быть даже на другом диске. Cygwin автоматически монтирует все диски Windows как /cygdrive/<drive-letter> по умолчанию, поэтому, например. d:\Repos доступен как /cygdrive/d/Repos в Cygwin. Вы также можете создать символическую ссылку на любой каталог за пределами Cygwin, чтобы вы могли, например. /cygdrive/d/Repos связан как ~/Repos для более быстрого доступа из Cygwin.

Только одно простое правило: в Cygwin используйте пути в стиле Cygwin, в Windows используйте пути в стиле Windows.

person David Ferenczy Rogožan    schedule 19.09.2015