Git pozwala na równoczesne operacje przy użyciu Pessimistic Concurrency Control.
W razie potrzeby git tworzy specjalne pliki, które działają jako zamki.
W szczególności za każdym razem, gdy indeks jest modyfikowany przez operację, git tworzy plik o nazwie index.lock
w katalogu .git
, aby zablokować udostępniony zasób. Git tworzy na potrzeby innych plików blokujących: na przykład plik .keep
jest tworzony podczas operacji git index-pack.
Ogólnie nie powinieneś martwić się o równoległe operacje z git: jest on starannie zaprojektowany, aby je wspierać.
Ktoś może powiedzieć, że nie powinieneś się martwić o wykonanie gc
z zadaniem cron, ponieważ git sam od czasu do czasu uruchamia gc
. Nawet jeśli to prawda, sama man page poleca:
Users are encouraged to run this task on a regular basis
within each repository to maintain good disk space utilization
and good operating performance.
Stąd, myślę, że nie jest to zły pomysł, aby zaplanować zadanie pracy, aby uruchomić zbieranie śmieci jest git. Zastanawiam się tylko, czy jest to przedwczesna optymalizacja, czy też próbujesz rozwiązać prawdziwy, wymierzony problem. Osobiście nigdy nie miałem problemów, które wymagałyby ręcznego uruchomienia gc
, ale nie byłbym zaskoczony, gdyby twoja sprawa była całkiem inna.
Dla # 1, zakładam, że mówisz o równoczesnych popychaczach do różnych gałęzi? Jednoczesne popychanie do tej samej gałęzi jest odpowiedziana w innym miejscu na SO. – cmbuckley
Czy możesz podać link? – dromodel
[q8424232] (http: // stackoverflow.com/questions/8424232/is-concurrent-git-pushes-always-safe-if-the-second-push-only-has-fast-forward); [q6028141] (http://stackoverflow.com/questions/6028141/concurrent-git-pull-and-push-on-same-remote-repo-from-different-locations) również mogą być interesujące. – cmbuckley