To, co robię (z tymi samymi celami), to umieścić moje pliki konfiguracyjne w podkatalogu ~/libi mieć dowiązania symboliczne w moim katalogu domowym, np .emacs -> lib/emacs/dot.emacs. Trzymam tylko pliki konfiguracyjne, które napisałem jawnie, pod kontrolą wersji; mój katalog domowy zawiera wiele automatycznie tworzonych plików kropek, które nie są pod kontrolą wersji. Zatem ~/libjest pod kontrolą wersji, a mój katalog domowy nie.
Mam skrypt, który tworzy dowiązania symboliczne z plików poniżej ~/lib. Kiedy tworzę konto na nowym komputerze, zapełniam je, sprawdzając ~/libi uruchamiając ten skrypt.
Moje doświadczenie dotyczy CVS, a nie git, więc nie można go w 100% przenieść. Jednym z powodów, dla których nie umieściłem mojego katalogu domowego bezpośrednio w CVS, jest to, ~/.cvsignoreże dotyczyłoby wszystkich moich kas CVS, a nie tylko mojego katalogu domowego; git nie ma tego problemu. Minusem tego podejścia w porównaniu z kontrolowaniem wersji katalogu głównego jest to, że nie można użyć git statusdo rozróżnienia pliku, który jawnie postanowiono zignorować (który byłby wymieniony w pliku ignorowania, więc nie jest wyświetlany) i plik, o którym nie masz zdania (który byłby wyświetlany za pomocą a ?).
Niektóre pliki muszą się różnić na różnych komputerach. Umieszczam je w katalogu o nazwie ~/Local/SITENAME/libi albo tworzę dla nich dowiązania symboliczne, albo (dla formatów plików, które go obsługują) zawierają dyrektywę dołączania w pliku poniżej ~/lib. Mam również dowiązanie symboliczne ~/Here -> ~/Local/SITENAME. Ponieważ git, w przeciwieństwie do CVS, jest zaprojektowany do obsługi głównie podobnych, ale nie identycznych repozytoriów, może istnieć lepszy sposób zarządzania plikami specyficznymi dla komputera. Niektóre z moich plików kropek nie są w rzeczywistości symbolicznymi linkami, ale są automatycznie generowane z treści pod ~/libi ~/Here.