Archiving Git branches as tags

etc.octavore.com

100 points by octavore 3 days ago


AdieuToLogic - 3 hours ago

On a related note, git supports incorporating custom commands via executables available in the `PATH` having the naming convention of:

  git-<command name>
Where "command name" in this case would be `archive-branch` and could be defined thusly:

  #!/bin/sh
  # git-archive-branch

  git_branch="${1:-$(git branch --show-current)}"

  git co main &&
    git tag archive/$git_branch $git_branch &&
    git branch -D $git_branch
It then could be invoked the same as the alias:

  git archive-branch ...
ziml77 - 10 hours ago

Seems like a sensible way to archive branches. It's not like a tag and branch are actually very different anyway, right? A tag is a pointer that always refers to the same commit while a branch is a pointer that follows commits forward. And for something that's archived, you don't need the pointer updating mechanism.

derriz - 8 hours ago

> Important note: the strange magic requires the official git completion script.

I dislike the official git completion script because it’s so slow when working with large repos. On macOS - because of vagaries of the way its file system works - with large repos it’s effectively unusable. Hint to completion script writers: if your “smart” completion ever takes seconds, it’s worse than useless and far worse than “dumb” filename completion.

PunchyHamster - 10 hours ago

How often did you go back to the archived tagches that are older than say, 6 months ? Seems very niche, unless dunno, there are no version tags in the repo.

tonymet - 9 hours ago

IMO a cleaner way to do this is with a headless remote, either on disk or “backed up” on a server. `git push —-all` won’t delete refs on the remote, so you don’t have to do any additional work to record or recover them.

`git push —all backup` will record all of your refs and tags

If you are archiving branches in your own rep, prefix with `ar/` so you can grep -v to conceal them.

See also `git notes` to record metadata an against a commit without changing the commit