我在Windows服务器上安装了cygwin,仅用于ssh。
另外,我已经安装了Git for Windows,因为它不支持Windows扩展,因此打折了Cygwin git的使用。
我有一个git ssh用户,可以登录(通过ssh)并可以在该用户的主目录下创建存储库。这允许我从运行SourceTree的OSX推送到服务器。在这种情况下,存储库位于: -
git@GitServer:Repos/Project.git
cygwin下文件夹的实际路径是: -
/cygwin/home/git/Repos/Project.git
但是,我希望能够将Repos目录直接放在cygwin文件夹的根目录下,而不是放在主文件夹下: -
/Repos/Project.git
执行此操作会导致SourceTree在尝试推送到repo时失败。我正在定义这样的路径: -
git@GitServer:/Repos/Project.git
我还检查了文件夹的权限,这不是问题。
失败导致此消息: -
致命:'/ Repos/Project.git'似乎不是git存储库
致命:无法从远程存储库读取。
请确保您拥有正确的访问权限 存储库存在。
我可以理解,如果将repo放在cygwin文件夹之外,我会遇到问题,但如果它不能放在root用户,并且任何人都可以解释我如何获取SourceTree访问的路径回购,如果它放在根,而不必创建符号链接?
答案 0 :(得分:0)
所以你有一个Git存储库的目录放在Cygwin的根目录中。我希望您的Cygwin的根目录是c:\cygwin
,因此Git存储库的目录是c:\cygwin\Repos\Project.git
。 Cygwin的根目录以/
的形式挂载在Cygwin中,因此您的Git存储库目录为/Repos/Project.git
。
SourceTree是本机Windows .NET应用程序,因此它使用Windows文件系统和Windows样式路径。因此,如果你说SourceTree在/Repos/Project.git
中寻找Git存储库,它试图在c:\Repos\Project.git
中找到它,这显然是错误的。 只需在SourceTree中将其设置为正确的Windows路径即可。
对于任何Windows应用程序都是一样的。只有Cygwin应用程序才能理解Cygwin的路径。您可以使用cygpath
将Cygwin路径转换为Windows,反之亦然。例如,此命令在Windows资源管理器中打开Cygwin中的当前目录:
explorer `cygpath -wa .`
此外,您可以将存储库放在任何地方,它不必位于Cygwin的根目录下。它甚至可以在不同的驱动器上。 Cygwin默认自动将所有Windows驱动器安装为/cygdrive/<drive-letter>
,例如,可以在Cygwin中以d:\Repos
访问/cygdrive/d/Repos
。您还可以创建一个指向Cygwin之外的任何目录的符号链接,这样您就可以获得例如/cygdrive/d/Repos
链接为~/Repos
,以便更快地从Cygwin访问。
只是一个简单的规则:在Cygwin下使用Cygwin样式路径,在Windows下使用Windows样式路径。