从本地开始的集中 Git 存储库
Centralized Git repository starting from local
假设我想用类似 SVN 的工作流程建立一个 Git 存储库(因此每个开发人员都参考 URL 上的集中存储库)。
我知道您可以无限制地推送到 Bare 存储库(但组权限等),但您不能在不使用强制选项的情况下推送到 Bare 存储库。所以像中央存储库这样的 "SVN" 应该被初始化。 我理解的对吗?
现在,我想知道从已经有 git 存储库(还没有克隆也没有远程 link)的本地文件夹生成集中存储库的最短方法是什么,源文件,并且可能有超过 1 个分支。
目前我使用以下方法,但我不确定是否足够:
在远程文件夹上 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
两个副本看起来不一样究竟是怎么回事?
提前致谢。
So a "SVN" like central repository should be initialized bare. Did I understood that properly ?
Pushing to a bare repository (without any working tree checked out, which might be impacted by the push) is the best practice.
git init --bare;
# local:
git remote add origin url_to_my_project.git
git push -u --all
Is this enough ?
是的。
如果你有一个监听器:ssh daemon(如“Getting Git on a Server") or HTTPS server (used for smart HTTP)
中提到的
When I clone the centralized repo on another local place, the new repo does not seems strictly equivalent than the original local copy.
When using git branch -a
command, I have two different results,
这是预期的:
git push --all
确实将所有分支推送到 refs/heads
/
下
The -u
part adds upstream (tracking) reference, used by argument-less git pull
等命令。
git branch -a
在你的第二个克隆上确实列出了 symbolic branch referenced by your remote repo.
origin/HEAD
代表 the default branch on the remote repository 你刚刚克隆。
第一个存储库(你推送的)不知道的东西,因为你正在推送到一个空的存储库(还没有默认分支)
远程存储库上的分支重命名为 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
也就是说,这不是推荐的也不是可扩展的方式,因为您需要在存储库的每个克隆上配置此映射。
有关详细信息,请参阅 the refspec section on the Git Book and 。
假设我想用类似 SVN 的工作流程建立一个 Git 存储库(因此每个开发人员都参考 URL 上的集中存储库)。
我知道您可以无限制地推送到 Bare 存储库(但组权限等),但您不能在不使用强制选项的情况下推送到 Bare 存储库。所以像中央存储库这样的 "SVN" 应该被初始化。 我理解的对吗?
现在,我想知道从已经有 git 存储库(还没有克隆也没有远程 link)的本地文件夹生成集中存储库的最短方法是什么,源文件,并且可能有超过 1 个分支。
目前我使用以下方法,但我不确定是否足够:
在远程文件夹上 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
两个副本看起来不一样究竟是怎么回事?
提前致谢。
So a "SVN" like central repository should be initialized bare. Did I understood that properly ? Pushing to a bare repository (without any working tree checked out, which might be impacted by the push) is the best practice.
git init --bare; # local: git remote add origin url_to_my_project.git git push -u --all
Is this enough ?
是的。
如果你有一个监听器:ssh daemon(如“Getting Git on a Server") or HTTPS server (used for smart HTTP)
When I clone the centralized repo on another local place, the new repo does not seems strictly equivalent than the original local copy.
When usinggit branch -a
command, I have two different results,
这是预期的:
git push --all
确实将所有分支推送到refs/heads
/
下 The-u
part adds upstream (tracking) reference, used by argument-lessgit pull
等命令。git branch -a
在你的第二个克隆上确实列出了 symbolic branch referenced by your remote repo.
origin/HEAD
代表 the default branch on the remote repository 你刚刚克隆。
第一个存储库(你推送的)不知道的东西,因为你正在推送到一个空的存储库(还没有默认分支)
远程存储库上的分支重命名为 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
也就是说,这不是推荐的也不是可扩展的方式,因为您需要在存储库的每个克隆上配置此映射。
有关详细信息,请参阅 the refspec section on the Git Book and