【问题标题】:Git: Two subdirectories, how to pull from different branches and push to one master branchGit:两​​个子目录,如何从不同的分支拉取并推送到一个主分支
【发布时间】:2017-12-12 03:38:58
【问题描述】:

我已经看到了有关如何将不同的目录推送到不同的分支、如何从不同的存储库中为不同的目录拉/推等的答案。但是我遇到了将这两件事结合起来的问题。

所以我在 mydir/ 中有一个 git 存储库,它有两个子目录:

1.)mydir/包 2.)mydir/foo。

mydir/package 是从另一个 git 存储库克隆的,我已经对其进行了设置,以便它从原始 git 存储库中提取并推送到个人存储库。我主要在这个 repo 的开发分支中工作。

mydir/foo 目录是我编写个人代码的地方。它仅拉取和推送到个人仓库。它使用 mydir/package 中的源代码,这就是我将这些目录保存在一个 repo 中的原因。

现在的样子:差不多好了。我移动到 mydir/package 文件夹,我可以根据需要更新、推送、拉取到正确的位置(不是正确的分支,而是正确的存储库)。 mydir/foo 也是如此。

哪里出错了:如果我是从mydir/push,那么去看看个人repo,有两个分支;掌握和发展

Master:repo 有一个文件夹 /foo,这很好。但是没有/package文件夹

开发:repo 包含 /package 的所有内容。没有 /foo 文件夹,也没有父目录。

为什么会出现问题:我已经能够对所有内容使用源代码控制,但是将两个目录的推送/更改放在两个单独的分支上很烦人。我必须分别进入每个目录并提交/添加/推送/等,然后每个目录都转到不同的分支。文件已备份,这很好,但对于下一个尝试克隆我的 repo 的人来说,这并不实用。

我想要什么:除了从 mydir/ 推送之外,这个 repo 的几乎所有内容都对我有用。我想从 mydir/ 中提取以从我的个人仓库中提取(这样我就不会意外更新 mydir/package 文件夹)。我仍然想从 mydir/package 中提取开发以从原始包的开发分支中提取。我只想从 mydir 提交/添加/推送来表示“更新个人 repo 的主分支以现在包含 mydir/package 和 mydir/foo 的当前状态。”当我查看这个个人 repo 时,我想查看 master 分支上的两个文件夹。

我尝试了什么->发生了什么: 1.) git push remote master(来自 mydir/package 文件夹)。

错误 ! [rejected] master -> master(先获取) 错误:未能将一些参考推送到“mypersonalrepo.git”

2.) 在个人仓库上拉取请求以合并开发和主分支

然后 mydir 文件夹有 mydir/package(它仍然在开发分支上并且有我所有的修改)、mydir/foo(它在正确的分支上),然后是远程 repo 的 master 分支中的所有文件.

3.) git add package/ -> git push origin master

什么都没有改变。这些文件夹仍然被推送到个人仓库的单独分支。

作为参考,如果我从 mydir/package 键入 git remote show origin 时的样子,也许我需要创建第二个远程仓库来进行这种自定义?

remote origin
Fetch URL: their_package_repo.git
Push  URL: mypersonal_repo.git
HEAD branch: master
Remote branches:
develop                         tracked
master                          tracked
some_other_branch               tracked
Local branches configured for 'git pull':
  develop merges with remote develop
  master  merges with remote master
Local refs configured for 'git push':
  develop pushes to develop (fast-forwardable)
  master  pushes to master  (local out of date)

【问题讨论】:

    标签: git version-control merge branch git-remote


    【解决方案1】:

    直接的答案是否定的。没有单独拉分支并将所有文件夹从分支推送到分支的功能。

    • 如果package 文件夹用作foo 文件夹的参考或库代码,则应将它们管理到同一分支(例如master)。
    • 如果package文件夹与foo文件夹分开工作,您应该将它们管理到不同的分支中。

    为什么不可能:当您将package 文件夹和foo 文件夹一起推送到master 分支时,这意味着这两个文件夹都被master 中的git 添加到版本控制中分支。当其他开发人员克隆/拉取您的个人仓库时,package 文件夹和 foo 文件夹将显示在 master 分支中。即使有其他方法可以为其他开发人员(git fetchgit checkout origin/master -- foo)仅显示master 分支上的foo 文件夹,但工作目录不是origin/master 的版本。因此,当开发人员将本地更改推送到您的个人 repo 时,git 会先让他们拉取,packagefoo 文件夹最终也会显示在 master 分支中。

    【讨论】:

    • 感谢您的回复。澄清一下,这两个文件夹确实可以一起工作,所以你说我最好将 foo 文件夹提交到我个人 repo 上的开发分支?
    • 是的,您应该将两个文件夹放在同一个分支中。提交 foo 文件夹来开发分支或合并包文件夹到 master 都可以。
    猜你喜欢
    • 2023-02-07
    • 2016-11-02
    • 2019-12-10
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多