让 git 守护进程服务于我创建的仓库

让 git 守护进程服务于我创建的仓库

我一直在为此绞尽脑汁,得出了一个可能的结果,但没有解决方案。首先,我的困境。

我有一个项目,我可以通过编程方式创建一个存储库。我可以编辑存储库的描述,设置默认分支等。这样就没问题了。

我还用它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类似问题。


@Zoredache

克隆存储库不会复制配置。配置大多位于计算机、用户或目录本地。

如果没有这些知识,我以为会有一种方法可以让 git 在克隆时同步初始配置。Git 的默认值不能由服务器覆盖,只能由用户覆盖。

也许 git 将来会允许这个选项,但很可能不会。算了。

答案1

我认为克隆的 .git 不应该与服务器 .git 内容匹配。对于设置服务器,我建议您按照书中的说明进行操作https://git-scm.com/book/en/v2/Git-on-the-Server-Getting-Git-on-a-Server

相关内容