Um SCM pode ser usado para isso:
-
Crie um repositório com apenas um único commit:
git init git add . git commit -m "initial commit"
-
Criar
-
Reverter para o estado original
git checkout -f # discard modifications to committed files git clean -f -d # delete files that were not committed
Para obter uma cópia em gravação real, você precisará de suporte em nível de sistema de arquivos. zfs
permite criar instantâneos por sistema de arquivos (e é barato criar um sistema de arquivos zfs separado apenas para a raiz da compilação); em btrfs
, o mesmo é feito através de subvolumes. Além disso, no btrfs, você tem um novo tipo de link chamado "reflinks", que são como hardlinks, mas com CoW.
btrfs subvolume create ~/build.base
[fill ~/build.base]
btrfs subvolume snapshot ~/build.base ~/build.temp
[run build in ~/build.temp]
btrfs subvolume delete ~/build.temp