21

假设有一个有 4 名开发人员的团队。我们还有一个用于项目的中央存储库。开发人员从中央存储库推送和拉取。在这里(在分散但集中的部分)它说可以在团队成员本地存储库之间推/拉。

每个开发人员都拉并推到原点。但是除了中心化的推拉关系,每个开发者还可以从其他同行那里拉取更改以形成子团队......从技术上讲,这意味着 Alice 定义了一个名为 bob 的 Git 远程,指向 Bob 的存储库,反之亦然反之亦然

现在的问题是如何定义指向 Bob 存储库的远程名称 bob。如果重要的话,开发人员可能会使用不同的操作系统。

4

6 回答 6

5

如果您在主机上建立用户帐户并在 repo 上访问权限,则其他人可以通过 SSH 推送/获取,无论是否建立命名的“远程”。

git push user@host:/path/to/repo branch

如果您经常共享代码,您可以设置一个命名远程来记住服务器路径:

git remote add remotename user@host:/path/to/repo

git daemon如果共享涉及密切协调(并且可能非常松散的安全性)是可以的,您可以根据需要在“master”上启动一个短暂的生命: git 相当于 'hg serve'? 在这种情况下,上述共享命令仍然适用,但user@host:/path将替换为git://host/. 另请参阅git 守护程序文档

或者,您可以设置一个单独的专用存储库以用于中间共享:如何在 git 中设置暂存存储库?

于 2017-03-11T03:10:35.417 回答
4

这是很常见的事情,比如Alice 和 Bob 需要一起处理某些功能。同时,开发应该由不同的开发人员在不同的分支上进行。

简单的方法是:

  • 创建一个新的分支 sprint_1,Alice 和 bob 结帐到 sprint_1
  • 所有与功能相关的更改都应在此处完成
  • 推拉操作应使用

    git pull origin sprint_1  and git push origin sprint_1
    

当更改完成并且 sprint_1 具有稳定的代码时,它可以与其他分支合并。如果 sprint_1 上的代码已经走了很长一段路,建议 rebase 分支而不是合并以避免冲突或樱桃采摘。

于 2013-08-16T06:58:02.550 回答
2

类似于Windows 中跨本地文件系统的 GIT 克隆 repo

根据 JFSebastian 的回复:

$ git clone --no-hardlinks /path/to/repo

上面的命令对您的 git 存储库的目录使用 POSIX 路径表示法。对于 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 选项。

于 2013-09-06T13:12:41.550 回答
1

如果两个 repos 共享一个文件系统命名空间,您可以直接使用文件系统路径。否则,开发人员可以轻松地运行本地 git 服务器,例如在 VPN 访问已经是私有的,该git daemon命令将很好地提供获取服务,否则您可以在专用端口上设置 ssh 访问以通过更多工作来实现相同的效果。

于 2013-09-06T15:27:03.953 回答
1

我想做类似的事情,就我而言,我正在寻找一种在嵌入式系统(运行 Linux)上同步项目的简单方法。以前我只是设置一个共享的互联网连接并从集中存储库中提取。但我发现这样工作并不容易,有时我的互联网连接很差。

在下面的文章中git daemon很好地解释了使用来解决这个问题。我只是把内容的简短副本放在这里: http ://railsware.com/blog/2013/09/19/taming-the-git-daemon-to-quickly-share-git-repository/

设置以下别名以对您的存储库进行读取访问(服务)或读/写访问(集线器):

$ git config --global alias.serve "!git daemon --base-path=. --export-all --reuseaddr --informative-errors --verbose"
$ git config --global alias.hub "!git daemon --base-path=. --export-all --enable=receive-pack --reuseaddr --informative-errors --verbose"

然后在主机上执行git servegit hub从您要共享的存储库所在的目录执行。现在在客户端上可以执行git clone git://x.x.x.x/path/to/repo访问主机上的本地存储库!

对于 Windows 用户:

  • 在命令中使用双引号来设置别名
  • 确保通过右键单击标题栏并选择“编辑”->“标记”来“挂起”命令提示符以使其不输出任何行。否则,与客户端的连接可能会由于 git 中的错误而中断(根据博客文章中的评论)。
于 2017-03-01T14:58:28.197 回答
0

TL;DR - 您想为每台用作遥控器的机器执行第4.4章中的步骤。

如果您在您的机器和您想要共享的机器之间拥有自由,那么获得真正的分布式工作流程并不是那么困难。本质上,您需要每台提供 repo 的机器充当 SSH git 服务器。

这里的一些答案表明您可以简单地在机器之间添加用户并使用用户密码来建立 SSH。git book 的第4.1章和第4.4章还详细介绍了创建单个用户,该用户通过~/.ssh/authorized_keys文件中的 SSH 密钥列表授予对远程请求的访问权限。这似乎是一种很好的综合方法来管理授予您同事的访问权限,但仍需要管理合并帐户的 authorized_keys 文件中的用户密钥。需要考虑的事情,因为这是“你的”开发盒,而不是合适的“服务器”。

从来没有使用过git daemon,我不能确切地说它有多好,但如果你愿意使用该git协议,它似乎是一个可行的选择,并且对在每台应该服务于从网络中的安全位置存储库。在此处说明文档在提及防火墙设置时提到以下内容也可能会有所帮助:

如果你正在运行防火墙,你还需要在你设置它的盒子上的端口 9418 上打一个洞

于 2021-08-16T17:46:58.527 回答