On Thu, May 3, 2012 at 8:58 PM, Rich Pixley <rich.pixley@xxxxxxxx> wrote: > On 5/1/12 16:30 , Felipe Contreras wrote: >> >> Show all the hg commands of what you are trying to do, and we can show >> you how you can achieve the same in git, but much more easily. > > hg init foo > for i in `yes | head -4000`; do (set -x ; d=`date +%s.%N` ; hg clone foo > foo-$d; (cd foo-$d && date > bar && hg add bar && hg ci -m $d)); done > for i in foo-*; do (set -x ; (cd $i && hg push -f)); done Well, that's your problem right there; you are doing something totally stupid. Even the mercurial documentation tells you so: --- By default, push will not allow creation of new heads at the destination, since multiple heads would make it unclear which head to use. In this situation, it is recommended to pull and merge before pushing. --- The git way (which happens to be the mercurial way too), is to fetch and merge (pull) before pushing: do_commit() { (cd $1 && date +%N > bar && git add bar && git commit -m "$2") ;} git init foo; do_commit foo "Initial commit" for i in $(seq 1 10); do git clone foo foo-$i; do_commit foo-$i $i; done for i in foo-*; do (set -x; (cd $i && git pull -s ours --no-edit; git push)); done Do you seriously think it makes sense to have 4000 people doing independent development on 4000 different lines of development all ignoring each other? Which of the 4000 heads would you pick to test this "branch"? Who is going to do the merge of these 4000 heads? This is a recipe for disaster. You prefer a DVCS that allows you to do stupid stuff, well that's your choice, but don't blame git for making it difficult for you to do stupid stuff. You should stop doing that and follow the git/mercurial way; fetch/pull, merge, and push. Cheers. -- Felipe Contreras -- 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