On Thu, Nov 13, 2014 at 5:03 PM, Fredrik Gustafsson <iveqy@xxxxxxxxx> wrote: > Thanks for sharing your notes! A few comments: > > On Thu, Nov 13, 2014 at 04:44:57PM +0100, Olaf Hering wrote: >> First clone the remote repository as usual. Then create a local branch for >> each remote branch that is supposed to be worked on: >> # git clone git://host/repo.git repo-master >> # cd repo-master >> # git checkout -b branchA origin/branchA >> # git checkout -b branchB origin/branchB >> # cd - >> >> Now clone each work branch into its own directory. The work dir references the >> master repo. All changes come from and go into this repo, instead of the >> remote repo. >> # git clone -l -b branchA repo-master repo-branchA >> # git clone -l -b branchB repo-master repo-branchB >> >> To make changs in a work dir, commit as usual. The changes will be pushed from >> the work copy into the local master repo. Its required to have some other >> branch than branchA active in repo-master, or push from work copy to >> repo-master will fail. > > That's one of the reason it's not recommended to push into a non-bare > repository. You should clone your repo-master with the --bare option to > avoid having a work dir there. > >> To publish the outstanding changes its required to do this from the master >> repo. First checkout the work branch, then pull the local changes and finally >> push them to the remote repo. >> # cd repo-master >> # git checkout branchA >> # git pull >> # git push origin branchA >> # cd - > > It's not. You could just add your remote repository as a remote to each > of your clones of your master repo and push directly from them. It > would be much simplier and it would allow you to directly fetch changes > from your remote into your branches as well. > > (however, I'm not sure but I think, that this will slowly increase the > difference between your repositories when you develop. So that they > won't change any new data since to local clone was made). Can you not do this much simpler with --reference? Like this: $ git clone --bare git://host/repo.git repo-master $ git clone -b branchA --reference repo-master git://host/repo.git repo-branchA $ git clone -b branchB --reference repo-master git://host/repo.git repo-branchB All three repos now push/pull directly to/from git://host/repo.git, but repo-branchA and repo-branchB reference objects from within the bare repo-master. You have to make use to never delete objects from repo-master (if those objects happen to be referenced from repo-branchA|B). If you want to prevent the repos growing in size, you must devise a way to add new objects into repo-master before repo-branchA|B. (e.g. a nightly cron-job in repo-master that fetches from origin), so that when repo-branchA|B pulls, they will find most objects are already present in repo-master. ...Johan -- Johan Herland, <johan@xxxxxxxxxxx> www.herland.net -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html