From: Łukasz Lew Date: Sun, 14 Dec 2008 16:48:30 GMT Subject: Re: How to maintain private/secret/confidential branch. Message-ID: In-Reply-To: <20081214160645.GA21358@myhost> Hi Alexander, On Sun, Dec 14, 2008 at 17:06, Alexander Potashev wrote: > Hello, Łukasz! > > On 16:38 Sun 14 Dec , Łukasz Lew wrote: >> Thanks Nick, thats really helpful (and surprisingly simple). >> I have a couple more questions: >> >> On Sun, Dec 14, 2008 at 15:55, Nick Andrew wrote: >> > On Sun, Dec 14, 2008 at 02:49:50PM +0100, Łukasz Lew wrote: >> >> I don't know how to make such a scenario work: >> >> - two repositories: pub, priv >> >> - priv is clone/branch of pub >> >> - there is some constant developement both in pub and priv >> >> - there are regular syncs with pub in priv >> >> >> >> Problem: >> >> Occasionally I want to push some changes from priv to pub. >> >> Then after syncing with pub I want to get as few conflicts as possible. >> >> >> >> Is it possible to do with git? >> > >> > Git can do almost anything. One should instead ask "How to do this >> > with git?" :-) >> >> So I've heard, but not yet experienced it myself. I'm thrilled to try. >> >> > >> > If I understand your problem, you could solve it with git cherry-pick >> > and rebase. On priv, make a for-public branch from a pub branch. Then >> > cherry-pick the commits you want from your private branch into the >> > for-public branch. >> >> That almost works. Can I somehow split existing commits just like in git-add -p? > It's, however, better to make more commits to not experience the need of > commit splitting. Indeed good advice and best practice, but another best practice is to not commit not compiling state. My common scenario is that I code a big change in priv repository, and after that I find that some of its parts can and should be moved to pub. > > But you can use '--no-commit' option of 'git cherry-pick' and 'git merge' > (and 'git pull' as well as 'git merge'). For example: > > git cherry-pick --no-commit # cherry-pick without commiting > git reset -- # unstage all changes > git add -p # patch update > > You can also use 'git add -i' (interative mode) instead of 'git add -p'. That's a possible solution indeed. Now I see that the right "plumbing" I need is splitting a commit into smaller parts and merging several commits into a larger one. I think that would be nice functionality. Do you know any tool that would allow such a manipulation on commits in history? Thanks Lukasz > >> >> > Push your for-public branch to pub, >> > then rebase your private branch. >> >> Rebase to the tip of master? Is it needed? Ie. cherry-pick does not >> remove the patch from >> the master in priv. >> >> If I now pull from pub, I will get the same change and it mereges nicely :D >> >> Can I get away without creating for_pub branch? maybe cherry pick in >> pub from priv somehow? >> >> > >> > Nick. >> > > > Alexander >