Serwer Git jak GitHub? [Zamknięte]

412

Jestem od dawna użytkownikiem Subversion, który chce wypróbować Git. Przeczytałem o tym trochę i rozumiem rozproszoną naturę - widzę wiele korzyści.

Jednak podoba mi się pomysł centralnego serwera, który może pełnić rolę kopii zapasowych, systemu rejestrowania itp., Jednocześnie nadal używając Git do lokalnego tworzenia oddziałów i udostępniania. Nie robię projektu typu open source, więc nie mogę korzystać z Github (bez płacenia), więc moje pytanie naprawdę brzmi: jaki jest najlepszy sposób prowadzenia lokalnego serwera git?

Zdaję sobie sprawę, że może to być niezgodne ze standardowym wzorcem użytkowania Git, ale przyda się w moim projekcie. Wszelkie obawy, które mogłem przeoczyć, są jednak zawsze mile widziane.

Dzięki!

skaz
źródło
50
Używanie scentralizowanego serwera, tak jak go opisujesz, jest w rzeczywistości standardowym wzorcem użytkowania rozproszonych systemów kontroli wersji, więc nie martw się o to. :-)
Aasmund Eldhuset
8
Ahh - myślałem, że to bardziej wyjątek. Chciałem się odeprzeć „jeśli masz centralizację, to po prostu jej nie rozumiesz!” komentarze Dzięki.
skaz
27
Rozsądna myśl. :-) W moim rozumieniu wielką zaletą rozproszonych VCS nie jest to, że nie powinieneś mieć centralnego repozytorium (często jest to bardzo przydatne), ale raczej, że nie musisz zmuszać się do korzystania z centralnego repozytorium - możesz wykonać lokalne zatwierdzenia i w razie potrzeby łatwo jest wymieniać poprawki z konkretnymi ludźmi, a nawet możesz mieć kilka „centralnych” repozytoriów (w git, każde inne repozytorium, bez względu na to, jaką rolę pełni, nazywa się zdalnym , i możesz dodaj tyle, ile chcesz). A DVCS często mają bardzo elastyczne modele rozgałęziania (tutaj świeci git).
Aasmund Eldhuset
15
Podsumowując / przeformułuj komentarz Aasmunda: celem DVCS często nie jest zlikwidowanie scentralizowanego repozytorium, ale zapewnienie każdemu innemu użytkownikowi również pełnej mocy VCS.
Cascabel
2
Google ma nowe repozytorium źródła w chmurze, które umożliwia prywatne repozytorium: cloud.google.com/tools/cloud-repositories Ponadto, FWIW, nie jestem pewien, dlaczego jest to oznaczone jako nie na temat!
Josh M.

Odpowiedzi:

203

Możesz po prostu skonfigurować serwer ssh i uruchomić tam centralne repozytorium. Wszyscy programiści po prostu zgadzają się (zgodnie z zasadami), aby wypychać na serwer, gdy skończą, zatwierdzać. To jest wzór użytkowania w moim miejscu pracy. Bardzo CVS i SVN.

  1. Znajdź miejsce na umieszczenie repozytorium (/var/gitroot na przykład).
  2. Utwórz nowe repozytorium (mkdir project.git && cd project.git && git init --bare --shared=group ).
  3. Następnie na kliencie sklonuj zdalne repozytorium (git clone ssh://yourserver.com/var/gitroot/project.git && cd project )
  4. dodaj niektóre pliki (git add README )
  5. commit ( git commit -m "Initial import"),
  6. push ( git push origin master)

To powinno skonfigurować wszystko dla ciebie.

Chris Eberle
źródło
5
Po prostu jasne: zainstaluj git na innym (dostępnym) serwerze i utwórz repo. Niech klienci klonują to repozytorium. Gdy klient zakończy naprawę, wypchnij do repozytorium serwera. Dzięki!
skaz
8
+1. W rzeczywistości jest to wzorzec użycia do wspólnego korzystania z git.
Aasmund Eldhuset,
1
Ten błąd wystąpił, gdy wepchnąłeś master źródła :::: Zliczanie obiektów: 3, gotowe. Pisanie obiektów: 100% (3/3), 244 bajty | 0 bajtów / s, gotowe. Łącznie 3 (delta 0), ponownie wykorzystane 0 (delta 0) zdalne: błąd: niewystarczające uprawnienia do dodania obiektu do bazy danych repozytorium ./objects zdalne: krytyczne: nie można zapisać obiektu błąd: rozpakowanie nie powiodło się: nietypowe wyjście z rozpakowania obiektów Do ssh: //localhost/var/gitroot/project.git! [zdalne odrzucenie] master -> błąd master (błąd rozpakowywania): nie udało się wypchnąć niektórych odnośników do 'ssh: //localhost/var/gitroot/project.git'
Abdo
3
Jakiś czas temu napisałem post na blogu o tym, jak skonfigurować lokalne repozytorium git. To maksymalnie 10 minut.
Trudność
Nie możesz po prostu uciec git init --bare project.git?
Dan Dascalescu
199

Gitorious to interfejs sieciowy typu open source do git, który można uruchomić na własnym serwerze, podobnie jak github:

http://getgitorious.com/

Aktualizacja:

http://gitlab.org/ jest teraz kolejną alternatywą.

Aktualizacja 2:

Gitorious dołączył teraz do GitLab

Craig
źródło
5
Wygląda ładnie, ale konfiguracja wydaje się ciężka (szczególnie dla użytkownika nie będącego szyną) [ cjohansen.no/en/ruby/setting_up_gitorious_on_your_own_server ]
gatoatigrado
1
Proces instalacji jest bardzo upraszczany i coraz mniej „Rails-y”. Istnieje również automatyczny instalator serwerów CentOS (i preinstalowane urządzenie) dostępny na stronie Install Gitorious w getgitorious.com.
thomanil
3
Wygląda na to, że Gitorious nie jest już darmowym rozwiązaniem hostingowym typu open source.
Mingming,
1
Jeśli wejdziesz na getgitorious.com i klikniesz Instalator w Gitorious Community Edition, czy to nie daje darmowego rozwiązania prywatnego hostingu typu open source?
Craig
16
Również gitlab.org to kolejna alternatywa, która została opracowana od mojej odpowiedzi.
Craig
74

Wypróbuj GitLab

Najlepsze narzędzie git GUI, jakiego kiedykolwiek używałem. Jest bardzo podobny do GitHub.

Jest to oprogramowanie typu open source (licencja MIT) i jest najczęściej instalowanym oprogramowaniem do zarządzania git z ponad 25 000 instalacji. Ma comiesięczne wydania i aktywną społeczność z ponad 375 współpracownikami. Możesz mieć nieograniczoną liczbę prywatnych, wewnętrznych i publicznych repozytoriów na własnym serwerze. Jest to aplikacja Ruby on Rails, która działa na większości platform uniksowych.

Plamen Nikołow
źródło
1
Zgadzam się, to niesamowite. (+1) Ale od tego komentarza instalacja jest trudna. Byłoby wspaniale, gdyby mogli spakować rpm, deb itp.
Synesso
2
Odkryłem, że stosunkowo nowa konfiguracja pojedynczego skryptu dla Ubuntu jest dość bezbolesna. Nawet bez niego jest to głównie kwestia wykonania instrukcji poza witryną. Nigdy nie korzystałem z szyn, a nawet z serwera Ubuntu i uruchomiłem go przy pierwszej próbie.
Jon Shier
Wystąpiły problemy z integracją z Active Directory przez LDAP.
riezebosch
2
Obecnie GitLab jest dość łatwy w instalacji. To tylko kwestia rozpakowania paczki. Zobacz about.gitlab.com/downloads
Job
2
Gitlab Enterprise nie jest oczywiście darmowy, ale istnieje wersja społecznościowa , która jest darmowa i łatwa w instalacji. Jednak wymaga około 800 MB miejsca na dysku, ponieważ instaluje kilka silników baz danych i wiele zależności.
OndroMih
39

Jeśli nie przeszkadza ci korzystanie z wiersza poleceń, gitolite to absolutna przyjemność podczas pracy w środowisku korporacyjnym, w którym musisz ustawić różne prawa dostępu do różnych repozytoriów. To rodzaj nowszej wersji gitosis wspomnianej przez @Chris.

Oto podsumowanie ze strony autora:

Gitolite pozwala używać jednego użytkownika na serwerze do hostowania wielu repozytoriów git i zapewnia dostęp do wielu programistów, bez konieczności podawania im prawdziwych identyfikatorów użytkownika na serwerze lub dostępu do powłoki. Podstawową magią w tym zakresie jest dostęp do klucza publicznego ssh i pliku autoryzowane klucze, a inspiracją był starszy program o nazwie gitosis.

Gitolite może ograniczyć, kto może czytać (klonować / pobierać) lub zapisywać (wypychać) repozytorium. Może również ograniczać, kto może przekazywać do jakiej gałęzi lub tagu, co jest bardzo ważne w środowisku korporacyjnym. Gitolite może być zainstalowany bez konieczności posiadania uprawnień roota i bez dodatkowego oprogramowania niż sam git i perl.

Ma dość obszerny zestaw funkcji, ale jedną rzeczą, którą bardzo lubię, jest to, że codzienna edycja konfiguracji odbywa się za pośrednictwem specjalnego repozytorium git. Oznacza to, że dodanie użytkownika jest po prostu

  • Dodaj użytkownika do pliku konfiguracyjnego
  • Dodaj klucz ssh użytkownika
  • Zatwierdź zmianę
  • Popchnij go do gitolitu
  • Voila, konfiguracja jest aktywna!

A kiedy trzeba patrzeć na kod przez przeglądarkę, gitolite obsługuje konfigurację „synchronizującą” z gitweb. Lub jeśli lubisz cgit , który jest bardzo dobrym frontendem dla gita napisanym w C, lepiej, powinieneś spojrzeć na to jak to zrobić .

stigkj
źródło
24

Możesz rozważyć Gitblit , zintegrowany , otwarty serwer Java Git, przeglądarkę i menedżer repozytorium typu open source dla małych grup roboczych.

James Moger
źródło
Gitblit wydaje się idealny do mojej aplikacji, ale martwi mnie to, że ostatnie wydanie było w 2016 roku.
Roberto
1
@Roberto, ważny punkt. Myślę, że to zależy od tego, czego potrzebujesz lub co jest dla Ciebie ważne. Jeśli to działa tak, jak jest, może być dobrym wyborem. Jeśli martwisz się o terminowe poprawki błędów lub potrzebujesz więcej funkcji, może nie.
Florian
15

Bare Bones Browser

git instaweb --httpd=webrick

z książki git scm

połącz to z czymś podobnym do opisanego tutaj podejścia do rozproszonego programowania ( przypis do datagrok za dobrze opisaną koncepcję)

Uruchom jednorazowy serwer git z dowolnego lokalnego repozytorium.

Już to napisałem na Twitterze, ale pomyślałem, że przydałoby się rozszerzenie:

Włącz zdecentralizowany przepływ pracy git: alias konfiguracji git. Zachowaj "daemon --verbose --export-all --base-path = .git --reuseaddr --strict-paths .git /"

Załóżmy, że używasz przepływu pracy git, który obejmuje pracę z podstawowym „oficjalnym” repozytorium, które pobierasz i wpychasz zmiany zi do. Jestem pewien, że robi to wiele firm, podobnie jak wielu użytkowników usług hostingowych git, takich jak Github.

Powiedzmy, że serwer lub Github na chwilę przestaje działać.

Nie martw się, w końcu jednym z powodów, dla których używasz git, jest to, że masz kopię całej historii projektu w lokalnym klonie.

Możesz nadal kodować i zatwierdzać, czekając, aż zespół operacyjny przywróci serwer do życia. Uwaga do siebie: kup pączki dla zespołu operacyjnego.

Ale co, jeśli podczas tego przestoju chcesz współpracować z inną osobą, która może nie być ekspertem od git, w tym samym repozytorium?

Lub, zamiast przestojów, co zrobić, jeśli ty i twój współpracownik jesteście w terenie, a z jakiegoś powodu nie możesz uzyskać VPN, aby zezwolić ci na połączenie z oficjalnym repozytorium?

A co, jeśli ty i twój współpracownik wprowadzacie szereg eksperymentalnych zmian i mimo że macie dostęp, nie chcecie pchać niedokończonego bałaganu do oficjalnego centralnego repozytorium? (Nawet jako gałęzie fabularne.) Być może jesteś w trakcie sprzątania katastrofalnej bazy lub scalania, a gałęzie są wszędzie.

Git, jak zapewne wiesz, jest „rozproszonym” systemem kontroli wersji .

Nawet jeśli możesz używać centralnego „oficjalnego” repozytorium git w swoim przepływie pracy, nadal możesz korzystać z git w trybie peer-to-peer, w którym ty i twój współpracownik po prostu budujecie i udostępniacie commity, a centralny serwer nigdy nie musi wiedzieć.

Jak więc zdobyć swoje gałęzie i zobowiązać się do nich lub odwrotnie?

  • Możesz użyć narzędzi git do poprawek e-mail. Jest to jednak trochę nieeleganckie i wymaga wiedzy na temat tego, jak stosować łatki wysyłane pocztą e-mail.
  • Możesz utworzyć konto na swoim komputerze, na którym współpracownik będzie mógł ssh. Ale może nie masz lokalnego dostępu do roota, a może nie ufasz im dostępem SSH do twojego urządzenia.
  • Możesz sklonować swoje repozytorium na pendrivie i przekazać je tam iz powrotem. Jest to jednak dość żmudne, zwłaszcza jeśli znajdujesz się w tej samej sieci lokalnej i wymaga napędu kciukiem.

Prawdopodobnie możesz pomyśleć o innych metodach. Ale jest super łatwy sposób: jeśli widzisz się w sieci, możesz uruchomić jednorazowy serwer git, którego mogą używać jako swojego pilota do klonowania, pobierania i wyciągania zmian oraz zabijania go, gdy jesteś skończone z tym.

Narzędzie, które to umożliwia git daemon, ma wiele opcji i funkcji, ale w celu umożliwienia tego łatwego jednorazowego „po prostu obsłuż repozytorium, w którym jestem”, sposobem na jego użycie jest utworzenie aliasu. Lubię to nazywać git serve. Biegać:

git config --global alias.serve "daemon --verbose --export-all --base-path=.git --reuseaddr --strict-paths .git/"

Używanie aliasu jest w rzeczywistości kluczowe, ponieważ aliasy git są wykonywane w katalogu podstawowym twojego drzewa roboczego. Zatem ścieżka „.git” zawsze wskazuje właściwe miejsce, bez względu na to, gdzie jesteś w drzewie katalogów swojego repozytorium.

Użyj nowego git servetak:

  1. Uruchom git serve. „Gotowy na dudnienie”, poinformuje. Git jest kiepski.
  2. Znajdź swój adres IP. Powiedzmy, że to 192.168.1.123.
  3. Powiedz „hej Jane, nie jestem gotowy / nie mogę przesunąć tych zmian do źródła, ale możesz pobrać moje zmiany do swojego klonu, uruchamiając git fetch git://192.168.1.123/
  4. Naciśnij ctrl + c, jeśli nie chcesz już obsługiwać tej repozytorium.

Możesz też powiedzieć Jane, żeby git clone git://192.168.1.123/ local-repo-namenie miała jeszcze klonu repozytorium. Lub użyj, git pull git://192.168.1.123/ branchnameaby pobrać i scalić jednocześnie, przydatne, jeśli pracujesz razem nad gałęzią funkcji.

Pamiętaj jednak, że nie powinieneś tego robić w wrogich sieciach, jeśli trzymasz sekrety w swoim repozytorium, ponieważ nie ma uwierzytelnienia. Nie reklamuje jego istnienia, ale każdy, kto ma skaner portów, może go znaleźć, połączyć się z nim i sklonować repozytorium.

Ale to nie jest bardzo niebezpieczne, ponieważ domyślnie jest tylko do odczytu. Przeczytaćgit daemon uważnie stronę jeśli uważasz, że chcesz włączyć dostęp do zapisu. W przypadku, gdy chcesz uzyskać zatwierdzenia współpracownika, o wiele bezpieczniej jest pozostawić je tylko do odczytu i poprosić współpracownika, aby również uruchomił to polecenie, abyś mógł z nich skorzystać.

Powiązane stycznie: na temat serwerów jednorazowych, jeśli chcesz tymczasowo udostępnić kilka plików statycznych przez HTTP: python -m SimpleHTTPServer

Mark Essel
źródło
11

Jeśli potrzebujesz dobrego, łatwego serwera GIT, musisz wypróbować GitBlit. Używam również gitolite, ale to tylko serwer, dzięki GitBlit dostajesz wszystko w jednym, serwer, administrator, repozytorium. kierownik ... URL: http://gitblit.com/

corysus
źródło
9

https://rhodecode.com to aplikacja internetowa typu open source dla Git & Mercurial, którą można bardzo łatwo zainstalować w dowolnym systemie operacyjnym (dołączony jest instalator).

RhodeCode (nowa wersja nazywa się RhodeCode Enterprise) dodaje brakujące funkcje Git, takie jak przegląd kodu, i ogólnie mówiąc, jest bardzo szybki i niezawodny.

Sebastian
źródło
1
Właściwie prowadzę tutaj własną instancję: code.gmgauthier.com . Wersja 3.x jest wyjątkowo czysta i stabilna. Używam go do czegoś więcej niż kodu (chociaż jest tego mnóstwo). Używam go do przechowywania głównych kopii moich osobistych czasopism, rękopisów dwóch książek, skryptów podcastów i szkiców blogów. Jest to idealne rozwiązanie, częściowo dlatego, że renderuje zarówno Markdown, jak i RestructuredText, dzięki czemu szkice są bardzo czytelne z dowolnego miejsca.
Greg Gauthier
8

Możesz również zainstalować Indefero , jest to klon GoogleCode GPL, ponieważ obsługuje zarówno Subversion, jak i Git, możesz mieć płynne przejście. Jestem autorem Indefero.

Loïc d'Anterroches
źródło
Używam tego i lubię to. Ale design jest nieco przestarzały. Czy to jest nadal utrzymywane?
Jaroslav
8

Może nie jest to najczęstsza konfiguracja serwera git, ale grając z różnymi układami, narzędziami, kopiami lustrzanymi i schematami uprawnień, powiedziałbym, że jedną całkiem solidną alternatywą dla korporacyjnych repozytoriów jest Gerrit , co może wydawać się zaskakujące, ponieważ jest bardziej znane jako narzędzie do przeglądu kodu. Zaczęliśmy używać go do przeglądania kodu i powoli stał się naszym głównym repozytorium, tracąc wartość g3 / gitolite

  • Wdrożenie jest proste (po prostu upuszczasz .war w kocurku)
  • ma interfejs WWW do zarządzania repozytoriami, grupami i uprawnieniami (lub ssh cli)
  • ma wbudowaną implementację ssh i git w Javie, więc nie musisz nic więcej konfigurować
  • obsługa ldap dla użytkowników i grup (zazwyczaj obowiązkowa dla firm)
  • bardzo elastyczny system uprawnień (z grupami projektów, dziedziczeniem uprawnień, ograniczeniem odczytu / zapisu / rozgałęzienia / niepoddanych przeglądowi zapisów itp.)
  • możliwości przeglądania kodu (jeśli lubisz to)
  • dublowanie repo (w celu wypchnięcia niektórych repozytoriów do github lub innych publicznych repo)

Ponadto jest używany w dużych projektach (np. Android, Chrome), więc skaluje się i jest teraz dość solidny. Po prostu daj swoim użytkownikom uprawnienia PUSH, jeśli chcesz pozwolić na ominięcie części przeglądu kodu.

simpoir
źródło
7

Do zdalnego hostingu Jak inni powiedzieli bitbucket.org oferuje bezpłatne prywatne repozytoria, korzystam z niego bez problemów.

Dla sieci lokalnej lub LAN dodam ten jeden scm-manager.org (Pojedynczy plik wykonywalny, jest naprawdę prosty do zainstalowania, jest napisany na Javie, aby mógł działać w systemie Linux lub Windows). Na wszelki wypadek są to domyślne hasła.

Username: scmadmin
Password: scmadmin
Hernán Eche
źródło
3
dzięki za podanie domyślnych danych logowania.
Ryan Williams,
6

W międzyczasie serwis hostingowy Mercurial Bitbucket zaczął także oferować repozytoria Git.

Więc jeśli nie potrzebujesz lokalnego serwera, tylko jakieś centralne miejsce, w którym możesz bezpłatnie hostować prywatne repozytoria Git, IMO Bitbucket jest najlepszym wyborem.

Bezpłatnie otrzymujesz nieograniczone prywatne i publiczne repozytoria Git i Mercurial.
Jedynym ograniczeniem jest to, że w bezpłatnym abonamencie nie więcej niż pięciu użytkowników może uzyskać dostęp do twoich prywatnych repozytoriów (aby uzyskać więcej, musisz zapłacić).
Zobacz https://bitbucket.org/plans aby uzyskać więcej informacji!

Christian Specht
źródło
4

Jeśli chcesz żądań pociągane są otwarte projekty źródłowe RhodeCode i GitLab i zapłacił Stash

joedborg
źródło
2

Jeśli chcesz, aby twoje repozytorium było w centralnym miejscu, jest to dość łatwe dzięki rozproszonej kontroli wersji, takiej jak Git:
Możesz po prostu umieścić swoje centralne repozytorium w jakimś współdzielonym folderze na centralnej maszynie i każdy może go sklonować.

Jeśli chcesz mieć „prawdziwą” witrynę na swoim lokalnym serwerze, znam witrynę hostingową Git http://repo.or.cz .
Wygląda na to, że ma mniej funkcji niż GitHub, ale w przeciwieństwie do GitHub, możesz pobrać kod źródłowy i hostować go na własnym serwerze lokalnym.

Oświadczenie: Czytałem tylko o repo.or.cz, sam nigdy tego nie próbowałem!

Christian Specht
źródło
2

w przypadku prostych konfiguracji można zapewnić dostęp ssh do serwera centralnego i skonfigurować katalog roboczy każdego użytkownika, aby wypychał / pobierał z tego „źródła”. To byłaby najprostsza i najczęstsza konfiguracja dla małych zespołów.

Możesz także zajrzeć do gitosis, który daje serwer http i możliwość zdalnego zarządzania nim. W ten sposób nie musisz udzielać dostępu ssh i wszystko, co pociąga za sobą każdego z osób odpowiedzialnych.

sbeam
źródło
2

Aby dodać do tego, co powiedział Chris, możesz użyć gitosis (http://eagain.net/gitweb/?p=gitosis.git), aby kontrolować, kto faktycznie może uzyskać dostęp do repozytorium.

W zależności od użycia możesz także użyć hooków (w folderze .git / hooks), aby kod był automatycznie wciągany do systemu plików serwera po wypchnięciu z komputera lokalnego. Oto popularny skrypt: http://utsl.gen.nz/git/post-update . Nie będzie to jednak konieczne we wszystkich przypadkach.

liamacheung
źródło
Link do skryptu po aktualizacji nie działa ...
Morten Jensen