使用网络共享作为Visual Studio 2015 Git远程仓库

3
我感觉缺少了某些东西,因为这个需求应该非常普遍...
假设以下情况:
五名开发人员,每人都使用带有Visual Studio 2015的Windows 10工作站。
一个联网的Windows 2012服务器文件服务器。
Windows服务器可通过包含IP地址的UNC路径(例如“\1.2.3.4\C$\repo\temp”)供所有五个开发人员使用。
我想做的就是将Visual Studio解决方案放在目标路径\1.2.3.4\C$\repo\temp上。一旦解决方案在那里,我希望每个开发人员都能从中进行克隆,并使用本地存储库进行开发,然后将更改推回文件服务器。
我的问题如下:
1.在这种情况下,文件服务器是否在技术上是与五个开发人员工作站相关的“远程存储库”?
2.如果答案是(1),则似乎在Visual Studio中,远程存储库必须定义为https://目标(UNC路径不起作用)。网络上的远程存储库可以被定义为UNC路径吗?
也许术语“远程存储库”在Git术语中非常特定...远程Git存储库必须是第三方存储库,例如GitHub,或者是一些其他基于互联网的终端。但那好像不太对。我不明白为什么远程存储库不能只是本地工作站上的文件路径或本地网络上任何其他可用路径。
也许在我的示例中,文件服务器在技术上不是“远程存储库”;如果是这种情况,那对我来说没问题,我将学习如何将其称为本地存储库...最终,我所关心的是,文件服务器将保存团队的“master”分支,并将用于创建构建。所有开发人员都将向文件服务器存储库进行推送。
如何设置这样的网络文件服务器并将其用作团队的主要存储库?如果您不知道如何使用Visual Studio 2015实现此目标,则仍然可以接受解释如何使用Git命令行工具完成此操作的答案...

你有没有考虑运行一个本地的GitLab服务器?(https://about.gitlab.com/) - thebjorn
仓库语法应该是 file:///path/to/repo.git/,但我不确定如何在 UNC 路径上使用它。也许你可以将 UNC 路径挂载为驱动器号(或者挂载到本地磁盘的文件夹中)?(https://git-scm.com/docs/git-clone#URLS) - thebjorn
把一个网络挂载的路径当作本地文件系统来使用,通常会导致文件锁定问题的出现(因此GitLab建议避免这种用法)。 - thebjorn
不,我尝试了file:///选项,但它无法看到终端节点。我尝试映射驱动器字母,但也没有成功。 - Jazimov
那么要用更多的/:协议是file://(类似于http://),因此第一个/是文件夹层次结构的根,所以也许是file:////unc/path/repo.git/ - thebjorn
显示剩余5条评论
2个回答

2
过去我做这个的时候,我们使用类Unix的UNC路径:即://SERVERNAME/Share/repository.git并确保共享仓库是一个裸仓库(即:git init --bare repository.git)。在仓库目录名称后添加.git只是一种常见惯例,表示它是一个裸仓库。
以下是一个非裸远程共享示例(git版本为2.7.0.windows.1):
C:\Code>git ls-remote \\SERVER\c$\Code\Build
fatal: '\SERVER\c$\Code\Build' does not appear to be a git repository
fatal: Could not read from remote repository.

C:\Code>git ls-remote //SERVER/c$/Code/Build
ad081d35144157551e3728d6deadf19ae106ced0        HEAD
ad081d35144157551e3728d6deadf19ae106ced0        refs/heads/master
ad081d35144157551e3728d6deadf19ae106ced0        refs/remotes/origin/HEAD
ad081d35144157551e3728d6deadf19ae106ced0        refs/remotes/origin/master

根据第一次尝试的响应,很明显我们有一个引用问题,因此加倍反斜杠可以解决它——或者切换到正斜杠。您可以使用file:// URL方案,但仍需要两个斜杠来指示UNC服务器部分,因此:

C:\Code>git ls-remote file:////SERVER/c$/Code/Build
ad081d35144157551e3728d6deadf19ae106ced0        HEAD
ad081d35144157551e3728d6deadf19ae106ced0        refs/heads/master
ad081d35144157551e3728d6deadf19ae106ced0        refs/remotes/origin/HEAD
ad081d35144157551e3728d6deadf19ae106ced0        refs/remotes/origin/master

1
那么从Visual Studio开始的步骤是什么?假设你有一个空的git文件夹,接下来该怎么办?你不能从中拉取。此外,如果解决方案在Visual Studio中尚未处于源代码控制下,我不知道如何进行初始“推送”。通常,您会将源代码控制添加到现有解决方案中,并在该解决方案的文件夹结构中创建一个.git文件夹。我可以尝试将其推送到空存储库中,但目前我还不确定如何... - Jazimov

1
当您创建一个将与其他用户共享的中央存储库时,应使用--bare选项进行创建:
git init --bare myrepo.git

这意味着没有创建工作目录,也没有顶级的 .git 目录(相反,通常会在 .git 文件夹中的内容位于顶层)。
裸库要求用户使用克隆 / 拉取 / 抓取 / 推送命令与仓库交互(而不是添加 / 提交与本地仓库交互)。
惯例是用 .git 扩展名命名裸库。虽然 Git 本身并不关心,但许多工具都需要这样做。
因此,如果您在 UNC 路径上创建了一个裸库,您应该能够直接使用它。

\1.2.3.4\C$\x\y.git

我会在服务器上明确共享目录,这样您就可以获得更好的路径显示...

理想情况下,我希望看到的解决方案不涉及 git 命令行界面,并坚持使用 VS 2015 IDE,但这个解决方案已经足够并且解释了 .git 扩展名。谢谢! - Jazimov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接