问题
I would like to create the following setup for my git repos:
I currently have a local git repo with all my working files. I would like to be able to setup a central bare repository, and two other non-bare repositories -- one for a live application and one for a testing version.
I would like to be able to push changes from local to the central bare repo on a testing branch. Then, on my testing repo, always pull from the testing branch of the bare repository.
When ready to go live with the changes, I would like to be able to merge my testing branch and my master branch in the central bare repository. Then the live repo could pull from the master branch.
So in this scheme, testing repo will always pull from testing branch, and live repo will always pull from the master branch.
I can't figure out how to merge branches in a bare repository though. git-merge and git-checkout don't seem to work without the working tree.
So, my question is two-fold:
- Is there a standard way to merge branches in a bare repo?
- Is this not straight-forward because the setup of my repos is poor? (In which case, how would you modify this architecture for best practices?)
回答1:
git checkout
checks out a branch into the working tree – how do you think this should have worked without a working tree? And git merge
and most other commands don’t work, because there is no HEAD inside of a bare repository.
To answer your question: You don’t work within the bare repository. A bare repository is only there to keep the data; if you want to work with it, use a clone which is not bare.
So from any other repository, you pull from the bare repository, merge locally and push your changes back to it. You should do this from your development repository btw. so that the live and test repositories only pull from their branch.
回答2:
Note, this can actually be done on a bare repo, but you have to work around the normal interface.
$ git read-tree -i -m branch1 branch2
$ COMMIT=$(git commit-tree $(git write-tree) -p branch1 -p branch2 < commit message)
$ git update-ref mergedbranch $COMMIT
回答3:
You must first clone from bare repository, merge your branch, then push to bare repository again. Because you haven't any working tree on bare repositories for solve conflict.
来源:https://stackoverflow.com/questions/7984986/git-merging-branches-in-a-bare-repository