代码之家  ›  专栏  ›  技术社区  ›  aw1975

从源存储库到目标存储库子文件夹的Git推送分支

  •  0
  • aw1975  · 技术社区  · 7 年前

    我想推一根树枝 sourcebranch 从源GIT存储库到目标存储库的子文件夹。两个存储库都是远程的。

    在源repo中,我使用以下命令向目标repo添加了一个远程:

    git remote add origin https://path-to-target-repo.git
    

    然后推开树枝:

    git push origin sourcebranch
    

    但这会将它推送到目标存储库的根位置,而实际上我想将它推送到该存储库的子文件夹。

    任何指导都将不胜感激。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Mark Adelsberger    7 年前

    git提交是整个项目版本的不可变快照。对于保存提交的每个repo,该快照中每个文件的路径都是相同的。你可以尝试使用一些疯狂的方案来解决这个问题,该方案在推送完成时重写历史记录,但如果你能让它正常工作,结果仍然会是一个不断与本地不同步的远程(即,你将无法干净地推送或拉送)。

    有两种选择,这取决于你想完成什么。

    如果远程包含多个要共享在一起的项目,但要单独修改每个项目,则可能最接近的做法是创建一个与本地类似的单独远程,然后将其推送到该远程,并将其设置为“更广泛”存储库的子模块或子树。

    如果您试图将git用作部署工具,而这些文件并没有出现在正确的工作路径中,那么您应该

    (a)将遥控器切换为裸机回购,并使用挂钩执行 chedkout 指定git工作树目录的操作,或

    (b)移动回购工作树的根,使其位于您希望它位于服务器上的位置,或

    (c)[我的建议]使用一个适当的部署工具,而不是让push做一些不是真正为之设计的事情

        2
  •  1
  •   larsks    7 年前

    如果希望文件位于子目录中,则需要在本地创建一个提交,将文件移动到相应的子目录中,然后将这些更改推送到远程存储库。

    mkdir mydirectory
    git mv file1 file2 file3 mydirectory
    git commit -m 'relocated files'
    git push