git和Cygwinpath与SourceTree

我已经在Windows服务器上安装了cygwin,完全是为了使用ssh

另外,我已经安装了Git for Windows ,已经打折了Cygwin git的使用,因为它不支持Windows扩展。

我有一个可以login(通过SSH)的git ssh用户,并可以在这个用户的主目录下创build存储库。 这允许我从运行SourceTree的OSX推送到服务器。 在这种情况下,存储库位于:

git@GitServer:Repos/Project.git 

在cygwin下的文件夹的实际path是: –

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

但是,我希望能够将Repos目录直接放置在cygwin文件夹的根目录下,而不是位于主目录下:

 /Repos/Project.git 

这样做会导致SourceTree尝试推向回购时失败。 我正在定义这样的path:

 git@GitServer:/Repos/Project.git 

我也检查了文件夹的权限,这不是问题。

失败的结果在这个消息: –

致命的:'/Repos/Project.git'似乎不是一个混帐存储库

致命的:无法从远程存储库读取。

请确保您拥有正确的访问权限并存在存储库。

我可以理解,如果repo被放置在cygwin文件夹之外,我会遇到问题,但是如果它不能放在根目录下,任何人都可以解释如何获取SourceTreepath来访问repo,如果放在根目录下,而不必创build符号链接?

所以你有一个放在Cygwin根目录下的Git仓库目录。 我会期望,你的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找到它,这显然是错误的。 只需将其设置为适当的Windows路径在SourceTree中,它将工作。

任何Windows应用程序都是一样的。 Cygwin的路径只能被Cygwin的应用程序所理解。 您可以使用cygpath将Cygwin路径转换为Windows,反之亦然。 这个命令例如在Windows资源管理器中打开Cygwin中的当前目录:

 explorer `cygpath -wa .` 

还可以将存储库放在任何你想要的地方 ,它不必在Cygwin的根目录下。 它甚至可以在不同的驱动器上。 Cygwin默认将所有Windows驱动器自动装载为/cygdrive/<drive-letter> ,所以例如d:\Repos可以在Cygwin中作为/cygdrive/d/Repos访问。 你也可以创建一个到Cygwin以外的任何目录的符号链接,所以你可以把eg /cygdrive/d/Repos链接成~/Repos以便从Cygwin获得更快的访问。

只是一个简单的规则:在Cygwin下使用Cygwin样式路径,在Windows下使用Windows样式路径。