![让 git 守护进程服务于我创建的仓库](https://linux22.com/image/747943/%E8%AE%A9%20git%20%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B%E6%9C%8D%E5%8A%A1%E4%BA%8E%E6%88%91%E5%88%9B%E5%BB%BA%E7%9A%84%E4%BB%93%E5%BA%93.png)
我一直在为此绞尽脑汁,得出了一个可能的结果,但没有解决方案。首先,我的困境。
我有一个项目,我可以通过编程方式创建一个存储库。我可以编辑存储库的描述,设置默认分支等。这样就没问题了。
我还用它git daemon
来提供保存所有生成的存储库的文件夹。这就是问题所在。
我可以克隆 repo,但是克隆的 repo 的.git
内容与原始 repo 不匹配。
我唯一能想到的是,当我创造这些 repos 我使用的是我系统的 git 进程,但是在克隆时我使用的是git daemon
的进程...我甚至不确定这是否有意义,而且我花了数小时搜索却一无所获。
作为参考,下面是我运行的激活命令git daemon
:
git daemon --reuseaddr --port=9999 --base-path=/Users/me/repos/ --export-all --verbose --enable=receive-pack --informative-errors --detach
以下是克隆命令的示例:
git clone git://localhost:9999/me/test18.git
以下是我运行来创建存储库的命令:
git init
git remote add origin git://localhost:9999/me/repo.git
git symbolic-ref HEAD refs/heads/magic
# more stuff
这些东西都可以工作,我只需要git daemon
按照它们原来的方式提供我的存储库。
.git/config
下面是我创建的 repo 中内容的一个示例:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = git://localhost:9999/me/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "coolerbranch"]
remote = origin
merge = refs/heads/coolerbranch
以下是克隆的同一个 repo:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = git://localhost:9999/me/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
如您所见,该[branch ...]
部分不匹配。
相反,如果还有其他git daemon
我还没发现的,我很乐意听听。Github 几年前一直在开发自己的产品,但后来放弃了。
另外,我最初在 SO 上发布了这个问题,但在其他 SE 网站上进一步搜索后,我发现 SF 有更多git-daemon
类似问题。
克隆存储库不会复制配置。配置大多位于计算机、用户或目录本地。
如果没有这些知识,我以为会有一种方法可以让 git 在克隆时同步初始配置。Git 的默认值不能由服务器覆盖,只能由用户覆盖。
也许 git 将来会允许这个选项,但很可能不会。算了。
答案1
我认为克隆的 .git 不应该与服务器 .git 内容匹配。对于设置服务器,我建议您按照书中的说明进行操作https://git-scm.com/book/en/v2/Git-on-the-Server-Getting-Git-on-a-Server。