From: Paul Gardiner Date: Mon, 11 Feb 2008 19:40:38 GMT Subject: Re: Best way to specify all local branches and all remote branches. Message-ID: <47B0A4B6.2090408@glidos.net> In-Reply-To: Jakub Narebski wrote: > Paul Gardiner writes: > >> New to git, and often finding it hard to specify the correct >> refs for a command. Here's an example where I was converting >> all the files in all the commits from unix line endings to >> DOS line endings. You can see I've ended up using cd and ls. >> I'm sure there must be a better way. > > git-for-each-ref, git-show-ref, git-ls-remote / git-peek-remote. Ah right, those look hellishly useful, thanks. >> $ cd /home/public/tmp/git/ >> $ yes |rm -r vdos32 >> $ git clone /export/git/vdos32.git vdos32 >> $ cd vdos32/ >> $ for f in `(cd /export/git/vdos32.git/refs/heads; ls)|sed -e >> '/master/d' -e '/origin/d'`; do git fetch origin $f:$f; done >> $ git-filter-branch --tag-name-filter cat --tree-filter 'find . -type f >> ! -name \*.gif ! -name \*.ico|xargs unix2dos -q' `(cd >> .git/refs/heads;ls)` > > If you want to fetch all branches, you can specify globbing refspec; > of course if you use separate remotes layout, or mirror layout. I think I tried that with my line 5 above. I tried refs/heads/*:refs/heads/* as the ref spec. Should something like that work? > If you want to pass all branches to git command, usually --all would > be enough (sometimes --heads). > >> With git-filter-branch, I'm surprised I can't use --all. > > git-filter-branch is about single branch; I'm not sure if it should > support --all. It seems to work with multiple branches, and I think it's important that it does, because as far as I can tell, that's the only way to filter a whole repository without visiting some commits more than once. Certainly my command, using cd/ls, worked and visited each commit exactly once. Cheers, Paul.