2

假设我想使用类似 SVN 的工作流来解决 Git 存储库(因此每个开发人员都引用 URL 上的集中存储库)。

我知道您可以不受限制地推送到裸存储库(但组权限等),但是如果不使用强制选项,您就不能使用常规存储库。所以像中央存储库这样的“SVN”应该被初始化为裸露的。我理解正确吗?

现在,我想知道从已经有一个 git 存储库(还没有克隆或远程链接)、源文件以及可能有多个分支的本地文件夹生成集中式存储库的最短方法是什么。

现在我使用以下方法,但我不确定它是否足够:

在远程文件夹 my_project.git 上:

  • git init --bare

现在只在本地文件夹 my_project 与现有 repo :

  • git remote add origin url_to_my_project.git
  • git push -u --all

这够了吗 ?

当我在另一个本地位置克隆集中式存储库时,新的存储库似乎并不严格等同于原始本地副本。在使用git branch -a命令时,我有两个不同的结果,我的 git 知识目前还不足以理解发生了什么。

在原始本地存储库上:

> git branch -a
* master
  remotes/origin/master

在从集中远程克隆的本地存储库上:

> git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

这两个副本看起来不相等到底是怎么回事?

提前致谢。

4

2 回答 2

2

所以像中央存储库这样的“SVN”应该被初始化为裸露的。我理解正确吗?推送到裸存储库(没有签出任何工作树,这可能会受到推送的影响)是最佳实践

git init --bare; 
# local: 
git remote add origin url_to_my_project.git
git push -u --all

这够了吗 ?

是的。如果你有一个监听器:ssh 守护进程(如“在服务器上获取 Git
”中提到的)或 HTTPS 服务器(用于智能 HTTP

当我在另一个本地位置克隆集中式存储库时,新的存储库似乎并不严格等同于原始本地副本。
使用git branch -a命令时,我有两个不同的结果,

这是预期的:

于 2020-03-07T19:38:07.530 回答
1

远程存储库上的分支被重命名为remote/<remote-name>/<branch-name>本地副本(默认情况下)以避免本地和远程存储库之间的名称冲突。

如果您想要类似 SVN 的行为(即共享相同的分支命名空间),您可以根据.git/config需要编辑映射:

# default configuration ('master' branch on remote corresponds to 'remotes/origin/master' branch on local)
[remote "origin"]
    url = git@github.com:example/url_to_my_project.git
    fetch = +refs/heads/master:refs/remotes/origin/master

例如:

# SVN-like configuration ('master' branch on remote corresponds to 'master' branch on local)
[remote "origin"]
    url = git@github.com:example/url_to_my_project.git
    fetch = +refs/heads/master:refs/heads/master

也就是说,这不是推荐的或可扩展的方式,因为您需要在存储库的每个克隆上配置此映射。

有关更多详细信息,请参阅Git Book和相关问答中的 refspec 部分

于 2020-03-09T13:02:09.780 回答