2010-04-25 12 views
5

Czy Git obsługuje dowolne komendy, które pozwoliłyby mi bezpośrednio z lokalnego/działającego drzewa do zdalnego repozytorium? Normalny przepływ pracy wymaga przynajmniej "git add", aby wypełnić bazę danych obiektów kopiami zawartości pliku itp.Napisz bezpośrednio do zdalnego repozytorium Git, bez dodawania obiektów do lokalnego indeksu/repo?

Rozumiem, że NIE jest to normalny, oczekiwany przepływ pracy Git. Zauważyłem jednak, że Git obsługuje już pobieranie bezpośrednio z repozytorium, bez lokalnego repozytorium ("archiwum git"), więc wydaje się rozsądne, że może wystąpić podobna operacja przesyłania.

Ewentualnie, jeśli nie ma takiego polecenia w samym rdzeniu Git, czy oprogramowanie innych firm obsługuje bezpośrednie zdalne zapisywanie?

+0

'git archive' służy konkretnemu celowi, który nie ma nic wspólnego z używaniem zdalnych repozytoriów zamiast lokalnych. Dlaczego chcesz to zrobić? –

+0

Marcelo, jeśli dobrze zrozumiem Git, zawsze skopiuje pliki do drzewa roboczego, całkowicie (aczkolwiek skompresowane/deduplikowane/spakowane) do bazy danych obiektów. Ogranicza to zastosowanie Git w sytuacjach, gdy lokalna pamięć jest ograniczona, w stosunku do rozmiaru/ściśliwości/strumienia roboczego drzewa. Jeśli Git mógłby uniknąć lokalnego repozytorium lub co najmniej lokalnego obiektu db, byłby to mniejszy problem. –

+0

nie, a to, o co prosisz, nie ma żadnego sensu. poważnie, miejsce na dysku twardym jest * bardzo * tanie. Dzienna pensja może kupić dysk o pojemności 500 GB lub nawet 1 TB. Repliki git są bardzo małe. – hasen

Odpowiedz

2

O ile mi wiadomo, nie (nie bezpośrednio zobacz moją wypełniony odpowiedź na końcu):

Oto official Git data workflow pomiędzy lokalnym i zdalnym repo:

alt text http://osteele.com/images/2008/git-transport.png

Jak widać, git add jest powiązany z indeksem i nie wpłynie jeszcze na lokalne repozytorium.
Cały zestaw poleceń, jesteśmy tutaj, aby pomóc egzekwować niektóre publication policies:

alt text http://osteele.com/images/2008/commit-policies.png


Jedynym sposobem, aby bezpośrednio wpłynąć zdalnego repo z lokalnymi zmianami (jak zmiany w swojej katalogu roboczego są całkowicie nieznany Git) to:

git diff -p origin > diff_not_in_origin.patch 

wysłać łatkę i zobaczyć, że serwer "pochodzenia" ma jakiś rodzaj trigera w miejscu, które będzie automatycznie łatało.

+0

Podziękowania VonC, v. Dokładne wyjaśnienie. Jeśli rozumiem "git am" poprawnie, to wywołuje "git apply" na zapleczu. Opierając się na stronach man, uważam, że "git apply" nie może działać na nagim repo. Więc wydaje mi się, że najlepiej jak mogę, tutaj, przenieść operacje DB/indeksu/obiektu do zdalnego hosta? –

+0

@Ryan: tak, lub możesz przenieść tylko * jeden * plik z pakietem git (http://stackoverflow.com/questions/2545765/how-can-i-email-someone-a-git-repository/2545784#2545784) i niech twoje nagie repo (http://stackoverflow.com/questions/1830701/how-do-i-check-if-a-repository-is-bare/1830712#1830712) tam (z różnych możliwości stamtąd: http : //stackoverflow.com/questions/2400043/automatically-pulling-on-remote-server- with-git-push/2400914#2400914). – VonC

1

Nie próbowałem tego sam, ale można spróbować użyć CVS, aby uzyskać dostęp do repozytorium git, używając "git cvsserver". Nadal potrzebujesz lokalnej kopii roboczej, ale zawiera ona tylko jedną kopię plików projektu plus niektóre metadane CVS.

Powiązane problemy