Git: 两个子目录,如何从不同的分支拉取并推送到一个master分支
Git: Two subdirectories, how to pull from different branches and push to one master branch
我已经看到关于如何将不同的目录推送到不同的分支,如何从不同的目录 pull/push 从不同的目录中 pull/push 等的答案。但是我在结合这两件事时遇到了问题。
所以我有一个 git 存储库,比如 mydir/,它有两个子目录:
1.)mydir/package
2.)mydir/foo。
mydir/package 是从另一个 git 存储库克隆而来的,我已将其设置为从原始 git 存储库中提取并推送到个人存储库。我主要在这个 repo 的 develop 分支工作。
mydir/foo目录是我写个人代码的地方。它只拉和推到个人回购。它使用 mydir/package 中的源代码,这就是我将这些目录保存在一个存储库中的原因。
现在的样子:差不多就好了。我移动到 mydir/package 文件夹,我可以根据需要更新、推送、拉取到正确的位置(不是正确的分支,而是正确的存储库)。 mydir/foo.
也是如此
出了什么问题: 如果我从mydir/ push,然后去查看personal repo,有两个分支;掌握和发展
大师:repo有一个文件夹/foo,没问题。但是没有/package文件夹
开发:repo 包含 /package 的所有内容。没有 /foo 文件夹,也没有父目录。
为什么会出现问题:我已经能够对所有内容使用源代码管理,但是将两个目录的 pushes/changes 放在两个目录上很烦人单独的分支机构。我必须分别进入每个目录和commit/add/push/etc,然后每个目录都进入不同的分支。文件已备份,这很好,但对于下一个试图克隆我的存储库的人来说,这并不实用。
我想要的:除了从 mydir/ 推送外,这个 repo 的几乎所有内容都对我有用。我想从 mydir/ 拉出我的个人仓库(这样我就不会不小心更新 mydir/package 文件夹)。我仍然想从 mydir/package 中拉出 develop 以从原始包的 develop 分支中拉出。我只想让 mydir 中的 committing/adding/pushing 表示 "update the personal repo's master branch to now contain the current status of mydir/package and mydir/foo." 当我查看这个个人仓库时,我想查看 master 分支上的两个文件夹。
我尝试了什么->发生了什么:
1.) git 推送远程主机(来自 mydir/package 文件夹)。
错误
! [rejected] master -> master(先获取)
错误:无法将某些引用推送到 'mypersonalrepo.git'
2.) 拉取个人仓库的请求以合并 develop 和 master 分支
mydir 文件夹然后有 mydir/package(仍然在 develop 分支上并且有我所有的修改),mydir/foo(在正确的分支上),然后是所有文件来自远程仓库的 master 分支。
3.) git 添加包/ -> 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)
直接的答案是否定的。没有这样的功能可以单独拉分支并将所有文件夹从分支推送到分支。
- 如果
package
文件夹作为foo
文件夹的参考或库代码,您应该将它们管理到同一个分支(例如master
)。
- 如果
package
文件夹与 foo
文件夹分开工作,您应该将它们管理到不同的分支。
为什么不可能: 当你在 master
分支中将 package
文件夹和 foo
文件夹一起推送时,这意味着这两个文件夹是两者都通过 master
分支中的 git 添加到版本控制。当其他开发者 clone/pull 您的个人仓库时, package
文件夹和 foo
文件夹将显示在 master
分支中。即使有其他方法可以为其他开发人员(git fetch
和 git checkout origin/master -- foo
)仅显示 master
分支上的 foo
文件夹,但工作目录不是 origin/master
。因此,当开发人员将他们的本地更改推送到您的个人 repo 时,git 将首先点击他们进行拉取,并且 package
和 foo
文件夹最终也会显示在 master
分支中.
我已经看到关于如何将不同的目录推送到不同的分支,如何从不同的目录 pull/push 从不同的目录中 pull/push 等的答案。但是我在结合这两件事时遇到了问题。
所以我有一个 git 存储库,比如 mydir/,它有两个子目录:
1.)mydir/package 2.)mydir/foo。
mydir/package 是从另一个 git 存储库克隆而来的,我已将其设置为从原始 git 存储库中提取并推送到个人存储库。我主要在这个 repo 的 develop 分支工作。
mydir/foo目录是我写个人代码的地方。它只拉和推到个人回购。它使用 mydir/package 中的源代码,这就是我将这些目录保存在一个存储库中的原因。
现在的样子:差不多就好了。我移动到 mydir/package 文件夹,我可以根据需要更新、推送、拉取到正确的位置(不是正确的分支,而是正确的存储库)。 mydir/foo.
也是如此出了什么问题: 如果我从mydir/ push,然后去查看personal repo,有两个分支;掌握和发展
大师:repo有一个文件夹/foo,没问题。但是没有/package文件夹
开发:repo 包含 /package 的所有内容。没有 /foo 文件夹,也没有父目录。
为什么会出现问题:我已经能够对所有内容使用源代码管理,但是将两个目录的 pushes/changes 放在两个目录上很烦人单独的分支机构。我必须分别进入每个目录和commit/add/push/etc,然后每个目录都进入不同的分支。文件已备份,这很好,但对于下一个试图克隆我的存储库的人来说,这并不实用。
我想要的:除了从 mydir/ 推送外,这个 repo 的几乎所有内容都对我有用。我想从 mydir/ 拉出我的个人仓库(这样我就不会不小心更新 mydir/package 文件夹)。我仍然想从 mydir/package 中拉出 develop 以从原始包的 develop 分支中拉出。我只想让 mydir 中的 committing/adding/pushing 表示 "update the personal repo's master branch to now contain the current status of mydir/package and mydir/foo." 当我查看这个个人仓库时,我想查看 master 分支上的两个文件夹。
我尝试了什么->发生了什么: 1.) git 推送远程主机(来自 mydir/package 文件夹)。
错误 ! [rejected] master -> master(先获取) 错误:无法将某些引用推送到 'mypersonalrepo.git'
2.) 拉取个人仓库的请求以合并 develop 和 master 分支
mydir 文件夹然后有 mydir/package(仍然在 develop 分支上并且有我所有的修改),mydir/foo(在正确的分支上),然后是所有文件来自远程仓库的 master 分支。
3.) git 添加包/ -> 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)
直接的答案是否定的。没有这样的功能可以单独拉分支并将所有文件夹从分支推送到分支。
- 如果
package
文件夹作为foo
文件夹的参考或库代码,您应该将它们管理到同一个分支(例如master
)。 - 如果
package
文件夹与foo
文件夹分开工作,您应该将它们管理到不同的分支。
为什么不可能: 当你在 master
分支中将 package
文件夹和 foo
文件夹一起推送时,这意味着这两个文件夹是两者都通过 master
分支中的 git 添加到版本控制。当其他开发者 clone/pull 您的个人仓库时, package
文件夹和 foo
文件夹将显示在 master
分支中。即使有其他方法可以为其他开发人员(git fetch
和 git checkout origin/master -- foo
)仅显示 master
分支上的 foo
文件夹,但工作目录不是 origin/master
。因此,当开发人员将他们的本地更改推送到您的个人 repo 时,git 将首先点击他们进行拉取,并且 package
和 foo
文件夹最终也会显示在 master
分支中.