更新时间:2023-01-17 18:28:01
对于你想要的行为,我想你必须从 Master
推送, t知道如何从 Slave
中引入子树更改。
推送更改:
(在Master中)
$ git subtree split --prefix = lib / slave -b split-branch
$ git push< ;裸机回购> split-branch:master
$ git branch -d split-branch
$ cd / path / to / Slave / working / copy
$ git pull#(现在在Slave中)
第一个命令根据目录创建一个新的子树,然后将其推送到另一个项目。
从理论上讲,您应该能够直接推送到工作副本,但在实践中,这对我不起作用。
The short of what's below: I want to push commit messages to a subtree, but only the messages that apply to that tree. How do I do this?
I have two projects, Master
and Slave
. Slave
is checked out as a subtree of Master
checked out to lib/slave
via git subtree merge --prefix=lib/slave --squash projects/slave
where projects/slave
is a branch that Slave
is checked out into:
Branches:
master projects/slave → slave
Now I'm working on my master
branch, making commits to files that are part of both projects, everything is going smoothly. Now I want to push changes back to Slave
:
If I do a normal merge I get commits for every commit to master, whether or not any files in lib/slave
were modified. Or I can do a --squash
and only get a single commit, but I lose the log messages.
So how do I get the appropriate log messages? e.g. if my master
log history is:
I'd want this added to Slave
:
For the behavior you want, I think you'll have to push from Master
, I don't know of a way to pull subtree changes from Slave
.
To push changes:
(in Master)
$ git subtree split --prefix=lib/slave -b split-branch
$ git push <bare Slave repo> split-branch:master
$ git branch -d split-branch
$ cd /path/to/Slave/working/copy
$ git pull # (now in Slave)
The first command creates a new subtree based on the directory, which is then pushed to the other project.
In theory, you should be able to push directly to a working copy, but in practice that didn't work for me.