Não tenho certeza se isso se encaixa com o que você está tentando realizar, mas em um projeto em que trabalhei, fizemos isso primeiro ditando uma estrutura de diretórios, algo como:
/usr/local/[project_name]/[version]
em que project_name
era o "nome base" do projeto e version
era uma versão marcada específica. Em seguida, usamos um número arbitrário para a versão do RPM (aumentando monotonicamente), para que as versões dentro da mesma tag ou ramificação pudessem ser atualizadas pelo RPM sem entrar em conflito com outras tags / branches. Isso significa que você precisa codificar um número de versão em algum lugar no cabeçalho do nome do RPM, em vez da versão, por exemplo,
Name: foobar-1.0
Version: 1234
Release: 1
# ...etc...
Nesse caso, o RPM pode instalar sob o caminho /usr/local/foobar/1.0
e as versões subseqüentes receberão o nome "foobar-2.0" e serão instaladas de maneira semelhante.
O nome "foobar-1.0" implica que você precisa de algum outro sistema, não o sistema RPM, para acompanhar os números das versões - usamos um shell script que simplesmente gerava o specfile sob demanda para um lançamento marcado. Isso pode ser um pouco incômodo, mas você adquire a flexibilidade de poder instalar várias versões de um pacote de uma maneira comum e de poder usar mais de uma ao mesmo tempo.
Esta é apenas uma sugestão e YMMV, obviamente.