有没有办法将子模块添加到裸git存储库中?

有没有办法将子模块添加到裸git存储库中?,git,gitosis,git-submodules,git-bare,Git,Gitosis,Git Submodules,Git Bare,我在gitosis的服务器上有一些回购协议。其中一个是主要的,它包括所有其他的。我在本地机器上使用它们,子模块层次结构构建在本地机器上。Gitosis的repos是裸(?)的,因此不可能在服务器上包含子模块。问题是,Main repo有一个赤裸裸的Redmine克隆(项目管理。Redmine显示统计数据、提交和文件的历史记录。它还允许直接在wiki中写入提交、文件或文件修订版的reflink)。但当文件放在子模块中时,redmine无法访问它们。那么,如何使子模块统计数据在裸回购中可见 ==u

我在gitosis的服务器上有一些回购协议。其中一个是主要的,它包括所有其他的。我在本地机器上使用它们,子模块层次结构构建在本地机器上。Gitosis的repos是裸(?)的,因此不可能在服务器上包含子模块。问题是,Main repo有一个赤裸裸的Redmine克隆(项目管理。Redmine显示统计数据、提交和文件的历史记录。它还允许直接在wiki中写入提交、文件或文件修订版的reflink)。但当文件放在子模块中时,redmine无法访问它们。那么,如何使子模块统计数据在裸回购中可见


==upd===

我不确定我的子模块是否总是包含在内。Redmine使用裸repo的克隆,始终可以显示任何文件的统计信息,但子模块显示为大小为0的文件。我已经尝试了默认方案
git@123.456.789.001:Main.git
现在
ssh://git@123.456.789.001/Main.git
子模块仍显示为零长度文件

git status
工作正常,并显示来自子模块的未推送提交,但repo是文件。这很奇怪,但redmine现在显示来自子模块的提交,但以其自身的奇怪方式,请看以下内容:

现在,我将尝试为每个子模块创建一个子项目,也许它将按其应有的方式进行引用。这是完全相关的

gitosis(或其最新版本)始终管理裸回购,允许任何用户(他们授权)推送到,而不必担心工作树与索引不同步

并且子模块总是“包含”在裸repo中:子模块只是对相关提交的引用(加上子模块repo的地址)

让Redmine绊倒的是:

  • .gitmodules中指定的地址(url)在Redmine上下文中未知。
    例如,它使用gitolite:aRepoName,其中gitolite是在~/config文件中定义的ssh快捷方式(请参阅):尝试使用完整的ssh uri方案:ssh://[user@]host[:port][/path],并检查地址是否可以从您的工作站和Redmine服务器工作

  • 使用一些选项(如
    git status--ignore submodules=all
    status.submodulesummary
    ,默认为false,防止status显示已修改子模块的提交摘要):请至少尝试确保Redmine处于git环境中,其中的
    status.submodulesSummary
    设置为true

gitosis(或其最新版本)始终管理裸回购,允许任何用户(他们授权)推送到,而不必担心工作树与索引不同步

并且子模块总是“包含”在裸repo中:子模块只是对相关提交的引用(加上子模块repo的地址)

让Redmine绊倒的是:

  • .gitmodules中指定的地址(url)在Redmine上下文中未知。
    例如,它使用gitolite:aRepoName,其中gitolite是在~/config文件中定义的ssh快捷方式(请参阅):尝试使用完整的ssh uri方案:ssh://[user@]host[:port][/path],并检查地址是否可以从您的工作站和Redmine服务器工作

  • 使用一些选项(如
    git status--ignore submodules=all
    status.submodulesummary
    ,默认为false,防止status显示已修改子模块的提交摘要):请至少尝试确保Redmine处于git环境中,其中的
    status.submodulesSummary
    设置为true


感谢.git/config设置!现在我可以走得更远了。@user685107:太好了。您需要确保的是,用于子模块的uri方案可以在Redmine服务器上用于克隆这些子模块repo。我一点也不了解。URI方案设置一次,并将在任何地方使用。我也只克隆了一次repos。和同步,都没有ssh(通过绝对路径)。通过Redmine获得回购与该计划有何关联?我可以给谁ssh密钥对?Apache不能使用ssh密钥,git用户不能进入其/var/spool/gitosis之外的任何目录,因此它不能对裸redmine repo执行操作。我曾尝试在redmine中包含子项目的回购协议,但没有成功,至少今天是这样。我想我也搞砸了一些提交,所以我有一段时间无法进行测试。@user685107:我的意思是:Redmine使用什么类型的uri来访问所述的repo<代码>http://xxx<代码>https://yyy<代码>ssh?您需要知道在Redmine中使用Git的进程是否能够访问该远程回购地址。例如,对于ssh访问,ssh密钥需要存在于
~/.ssh
(但是对于Redmine来说,`~`或'
HOME
'是什么?)Redmine正在以Apache+mod_的身份运行。同步repos是由root的cron脚本完成的。感谢您提供的.git/config设置!现在我可以走得更远了。@user685107:太好了。您需要确保的是,用于子模块的uri方案可以在Redmine服务器上用于克隆这些子模块repo。我一点也不了解。URI方案设置一次,并将在任何地方使用。我也只克隆了一次repos。和同步,都没有ssh(通过绝对路径)。通过Redmine获得回购与该计划有何关联?我可以给谁ssh密钥对?Apache不能使用ssh密钥,git用户不能进入其/var/spool/gitosis之外的任何目录,因此它不能对裸redmine repo执行操作。我曾尝试在redmine中包含子项目的回购协议,但没有成功,至少今天是这样。我想我也搞砸了一些提交,所以我有一段时间无法进行测试。@user685107:我的意思是:Redmine使用什么类型的uri来访问所述的repo<代码>http://xxx<代码>https://yyy<代码>ssh?您需要知道在Redmine中使用Git的进程是否能够