문제

I'm trying to setup a decent development pattern with my friend. The plan is that we do independent development on our own computers, then push to the dev server for testing, and then we push from the dev server to the productive server (Heroku).

The problem is, I can't make git behave. Perhaps I just don't know enough to fundamentally understand what's happening. I've setup the repo on the dev server, but when I clone it to my personal computer, I can't "push" it back because it complains about pushing to a non-bare repo. So then I tried branching the repos, and pushing branches, but now I get a lot of fast-forward statements, and I don't think I want those either.

So my question is this. How do I setup the server so it all just "works"? The server cannot be a bare repo, it needs to have the code in it so we can test the app. We want to be able to push and pull from the repo to our own dev computers smoothly. And the server needs to be able to push to Heroku (it can do this already). This is on my own server, so I have complete access to whatever I need to get this working. (Ubuntu Server Edition 11.04).

Thanks!

도움이 되었습니까?

해결책

The reason you can't push to a non-bare repository by default is that a non-bare repository has a checked-out working copy associated with it. When you push updates to the branch that is checked out, the working copy would become out of sync with its own repository, unless you specifically run a command to update it (which you can do using a post-receive hook). If you're aware of this and you would like to push to a non-bare repository anyway, you can set the receive.denyCurrentBranch configuration property to ignore and git will allow the pushes. For further details I refer you to a blog post I wrote some time ago (probably due for an update) which describes a similar setup that I use for my own website.

Note that instead of just development and production servers (each with their own non-bare repositories) I also have a third repository, a bare one, which I push changes to first, before sending them to dev; that way, I only ever push to the development server from one place, which helps keep things in sync.

다른 팁

To expound on @David Zaslavsky's comment, I would set up a bare repo to push to most of the time, then use something like git-deploy to push to your development server. You get the same semantics as pushing to Heroku, without Heroku.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top