GitHub 같은 Git 서버? [닫은]


412

나는 Git을 시도 할 오랫동안 Subversion 사용자입니다. 나는 그것에 대해 몇 가지를 읽고 분산 된 본질을 이해합니다-많은 이점을 볼 수 있습니다.

그러나 로컬 분기 및 공유에 Git을 계속 사용하면서 백업, 레코드 시스템 등의 역할을 수행 할 수있는 중앙 서버의 아이디어를 좋아합니다. 나는 오픈 소스 프로젝트를하고 있지 않으므로 Github을 사용할 수 없으므로 (지불하지 않고) 내 질문은 실제로 로컬 git 서버를 실행하는 가장 좋은 방법은 무엇입니까?

나는 이것이 표준 Git 사용법 패턴에 위배 될 수 있다는 것을 알고 있지만 내 프로젝트에 유용 할 것입니다. 그러나 간과 할 수있는 모든 문제는 언제나 환영합니다.

감사!


50
당신이 설명으로 중앙 서버를 사용하는 것입니다 그래서 그것에 대해 걱정하지 마십시오, 실제로 분산 버전 관리 시스템을위한 표준 사용 패턴. :-)
Aasmund Eldhuset

8
Ahh-더 예외라고 생각했습니다. "중앙 집중화가되어 있다면 그것을 얻지 못할 것입니다!" 코멘트. 감사.
skaz

27
합리적인 생각. :-) 분산 VCS의 가장 큰 요점은 중앙 저장소가 아니라고 생각하는 것이 아니라 중앙 저장소를 사용 하도록 강요받지 않는다는 것입니다. 로컬 커밋, 필요한 경우 특정 사람들과 개정판을 쉽게 교환 할 수 있으며, 여러 "중앙"저장소 (git, 다른 리포지토리의 역할에 관계없이 remote )를 가질 수 있습니다. 원하는만큼 추가하십시오.) 그리고 DVCS는 종종 매우 유연한 분기 모델을 가지고 있습니다 (git은 여기에서 빛납니다).
Aasmund Eldhuset

15
Aasmund의 의견을 요약 / 역시 : DVCS의 요점은 종종 중앙 리포지토리를 없애는 것이 아니라 다른 모든 사용자에게 VCS의 모든 기능을 제공하는 것입니다.
Cascabel

2
Google에는 개인 리포지토리를 허용하는 새로운 클라우드 소스 리포지토리가 있습니다. cloud.google.com/tools/cloud-repositories 또한 FWIW, 이것이 왜 주제가 아닌지 확실하지 않습니다!
Josh M.

답변:


203

ssh 서버를 설정하고 중앙 저장소를 실행할 수 있습니다. 그런 다음 모든 개발자는 커밋을 마치면 서버에 정책을 적용하기로 동의합니다. 이것은 내 직장에서의 사용 패턴입니다. 매우 CVS 및 SVN과 유사합니다.

  1. 저장소를 둘 곳을 찾으십시오 ( /var/gitroot예 :).
  2. 새 저장소 ( mkdir project.git && cd project.git && git init --bare --shared=group)를 작성하십시오 .
  3. 그런 다음 클라이언트에서 원격 저장소 ( git clone ssh://yourserver.com/var/gitroot/project.git && cd project)를 복제하십시오.
  4. 일부 파일 추가 ( git add README)
  5. 커밋 ( git commit -m "Initial import"),
  6. 푸시 ( git push origin master)

이것은 당신을 위해 일을 설정해야합니다.


5
방금 명확합니다 : 다른 (액세스 가능한) 서버에 git을 설치하고 저장소를 만드십시오. 고객에게 해당 리포지토리를 복제하도록합니다. 클라이언트가 수정을 완료하면 서버 저장소로 푸시 업하십시오. 감사!
skaz

8
+1. 사실,이는 자식의 공동 사용에 대한 사용 패턴.
Aasmund Eldhuset

1
이 오류는 origin master :::: counting objects : 3을 완료했을 때 발생했습니다. 객체 쓰기 : 100 % (3/3), 244 바이트 | 완료된 0 바이트 / 초 총 3 (델타 0), 재사용 된 0 (델타 0) 원격 : 오류 : 저장소 데이터베이스에 오브젝트를 추가 할 수있는 권한이 충분하지 않습니다. 원격 : 치명적 : 오브젝트 쓰기에 실패했습니다. //localhost/var/gitroot/project.git! [원격 거부 됨] master-> master (unpacker error) 오류 : 일부 심판을 'ssh : //localhost/var/gitroot/project.git'에 푸시하지 못했습니다
Abdo

3
얼마 전에 로컬 git repo를 설정하는 방법에 대한 블로그 게시물을 작성했습니다 . 최대 10 분입니다. 어려운 것은 적절한 로컬 서버 백업 전략을 설정하고 서버를 관리하는 것입니다.
atmosx

당신은 그냥 실행할 수 없습니다 git init --bare project.git?
Dan Dascalescu

199

Gitorious는 github과 같이 자신의 서버에서 실행할 수있는 git의 오픈 소스 웹 인터페이스입니다.

http://getgitorious.com/

최신 정보:

http://gitlab.org/ 는 현재 또 다른 대안입니다.

업데이트 2 :

Gitorious는 이제 GitLab에 합류했습니다


5
외모의 좋은,하지만 설치는 중량이 무거운 것 같습니다 [(특히 A의 사용자가 아닌 레일.) cjohansen.no/en/ruby/setting_up_gitorious_on_your_own_server ]
gatoatigrado

1
설치 과정이 크게 단순화되고 "레일 -y"가 줄어 듭니다. getgitorious.com 의 Install Gitorious 페이지에서 CentOS 서버 (및 사전 빌드 된 어플라이언스)를위한 자동 설치 프로그램이 있습니다 .
thomanil

3
Gitorious는 더 이상 무료 오픈 소스 프라이빗 호스팅 솔루션이 아닌 것 같습니다.
Mingming

1
getgitorious.com으로 이동하여 Gitorious Community Edition에서 Installer를 클릭하면 무료 오픈 소스 개인 호스팅 솔루션이 제공되지 않습니까?
Craig

16
또한 gitlab.org 는 내 대답 이후 개발 된 또 다른 대안입니다.
Craig

74

GitLab 사용해 보기

내가 사용한 최고의 git GUI 도구. GitHub와 매우 유사합니다.

오픈 소스 (MIT 라이센스)이며 25.000 개 이상 설치되어있는 가장 많이 설치된 git 관리 소프트웨어입니다. 월간 릴리스와 375 명이 넘는 기여자가있는 활발한 커뮤니티가 있습니다. 자체 서버에 개인, 내부 및 공용 리포지토리를 무제한으로 가질 수 있습니다. 대부분의 Unix 플랫폼에서 실행되는 Ruby on Rails 앱입니다.


1
동의합니다. 대단합니다. (+1) 그러나이 의견으로는 설치가 쉽지 않습니다. 그들이 rpm, deb 등을 패키징 할 수 있다면 좋을 것입니다.
Synesso

2
우분투를위한 비교적 새로운 단일 스크립트 설정이 꽤 고통스럽지 않다는 것을 알았습니다. 그것 없이도 그것은 대부분 사이트에서 지시를 따르는 문제입니다. 나는 레일이나 우분투 서버를 사용한 적이 없으며 처음 시도해 보았습니다.
Jon Shier 2019

LDAP를 통해 Active Directory와 통합하는 데 문제가 발생했습니다.
riezebosch

2
실제로 오늘날 GitLab은 설치가 매우 쉽습니다. 패키지 포장 풀기 만하면됩니다. about.gitlab.com/downloads
Job

2
Gitlab Enterprise는 물론 무료는 아니지만 무료이며 설치가 쉬운 Community Edition있습니다 . 그러나 몇 개의 데이터베이스 엔진과 많은 종속성을 설치하기 때문에 약 800MB의 디스크 공간이 필요합니다.
OndroMih

39

명령 줄을 사용하여 문제를 해결하지 않으려 는 경우 gitolite 는 다른 리포지토리에 대해 다른 액세스 권한을 설정해야하는 회사 환경에서 작업 할 때 절대적으로 중요 합니다. @Chris가 언급 한 최신 버전의 gitosis입니다.

다음은 저자 웹 사이트의 요약입니다.

Gitolite를 사용하면 서버의 단일 사용자를 사용하여 많은 git 리포지토리를 호스팅하고 서버에 실제 사용자 ID를 제공하거나 쉘에 액세스 할 필요없이 많은 개발자에게 액세스를 제공 할 수 있습니다. 이 작업의 필수 마법은 ssh의 pubkey access 및 authorized_keys 파일이며, 영감은 gitosis라는 오래된 프로그램이었습니다.

Gitolite는 리포지토리에서 읽거나 (복제 / 페치) 쓰거나 (푸시) 수있는 사람을 제한 할 수 있습니다. 또한 회사 환경에서 매우 중요한 분기 또는 태그로 푸시 할 수있는 사람을 제한 할 수 있습니다. Gitolite는 루트 권한없이 git 자체와 perl 외에 추가 소프트웨어없이 설치할 수 있습니다.

그것은 매우 포괄적 인 기능 세트를 가지고 있지만, 내가 매우 좋아하는 한 가지는 매일 매일 구성 편집이 특별한 git 저장소를 통해 수행된다는 것입니다. 즉, 사용자를 추가하는 것은

  • 구성 파일에 사용자 추가
  • 사용자의 ssh 키 추가
  • 변경 사항을 커밋
  • gitolite로 밀어
  • 짜잔, 구성이 시작되었습니다!

그리고 브라우저를 통해 코드를 볼 필요가있을 때, gitolite는 gitweb과의 "동기화"구성을 지원합니다. 또는 C로 작성된 git의 웹 프론트 엔드 인 cgit 을 좋아한다면 이 방법을 살펴보십시오 .


24

소규모 작업 그룹을위한 공개 소스 통합 순수 Java Git 서버, 뷰어 및 저장소 관리자 인 Gitblit을 고려할 수 있습니다 .


Gitblit은 내 응용 프로그램에는 완벽 해 보이지만 마지막 릴리스가 2016 년인 것이 걱정됩니다.
Roberto

1
@Roberto, 유효한 포인트. 나는 그것이 당신이 필요로하거나 중요한 것에 달려 있다고 생각합니다. 그것이 당신을 위해 그대로 작동한다면, 그것은 여전히 ​​유효한 선택 일 수 있습니다. 시기 적절한 버그 수정이 필요하거나 더 많은 기능이 필요한 경우에는 그렇지 않을 수 있습니다.
Florian

15

베어 본 브라우저

git instaweb --httpd=webrick

로부터 자식 SCM 책

분산 개발을 위해 여기 에 설명 된 접근 방식과 결합 하십시오 ( 잘 설명 된 개념을 위해 데이터 대 신용 )

로컬 리포지토리에서 일회용 git 서버를 시작하십시오.

나는 이것을 이미 트윗 했지만 확장을 사용할 수 있다고 생각했습니다.

분산 된 git 워크 플로우 활성화 : git config alias.serve "daemon --verbose --export-all --base-path = .git --reuseaddr --strict-paths .git /"

변경 사항을 가져오고 푸시하는 핵심 "공식"리포지토리 작업을 포함하는 git 워크 플로를 사용한다고 가정 해보십시오. 많은 회사가 Github와 같은 git 호스팅 서비스 사용자와 마찬가지로이 작업을 수행한다고 확신합니다.

해당 서버 또는 Github이 약간 다운되었다고 가정하십시오.

결국 git을 사용하는 이유 중 하나는 걱정할 필요가 없으므로 로컬 클론에 전체 프로젝트 기록의 사본이 있습니다.

운영 팀이 서버를 다시 작동시킬 때까지 기다리는 동안 코딩과 커밋을 계속 유지할 수 있습니다. 자기주의 사항 : 운영 팀을 위해 도넛을 구입하십시오.

그러나이 가동 중지 시간 동안 같은 저장소에서 git 전문가가 아닌 다른 사람과 공동 작업하려면 어떻게해야합니까?

또는 다운 타임 대신 공동 작업자가 현장에 있다면 어떤 이유로 VPN을 사용하여 공식 저장소에 연결할 수 없습니까?

또는 귀하와 공동 작업자가 많은 실험적 변화를 조사하고 있으며 액세스 권한이 있더라도 완료되지 않은 혼란을 공식 중앙 저장소로 푸시하고 싶지 않은 경우는 어떻습니까? (피처 브랜치조차도 아닙니다.) 아마도 당신은 비참한 리베이스 또는 병합을 청소하는 도중에 있고 브랜치는 모든 곳에 있습니다.

잘 아시다시피, git은 "분산 된"버전 제어 시스템 입니다.

워크 플로에서 중앙의 "공식"git 리포지토리를 사용하더라도 피어-투-피어 방식으로 git을 사용할 수 있습니다. 여기서 동료와 동료는 단순히 커밋을 구축하고 공유합니다. 서버는 알 필요조차 없습니다.

그렇다면 어떻게 브랜치를 얻고 그들에게 커밋합니까?

  • 전자 메일 패치에 git의 기능을 사용할 수 있습니다. 그러나 그것은 약간 우아하지 않으며 전자 메일 패치를 적용하는 방법에 대한 지식이 필요합니다.
  • 공동 작업자가 ssh 할 수 있도록 자신의 컴퓨터에 계정을 만들 수 있습니다. 그러나 로컬 루트 액세스 권한이 없거나 상자에 대한 SSH 액세스 권한을 신뢰할 수 없습니다.
  • repo를 썸 드라이브에 복제하여 앞뒤로 전달할 수 있습니다. 그러나 특히 동일한 로컬 네트워크에 있고 엄지 드라이브가 필요한 경우에는 다소 지루합니다.

다른 방법도 생각할 수 있습니다. 그러나 매우 쉬운 방법이 있습니다. 네트워크에서 서로를 볼 수 있다면 원격으로 사용할 수있는 일회용 git 서버를 시작하여 변경 사항을 복제, 가져 오기 및 끌어 당겨서 죽일 수 있습니다 그것으로 끝났다.

이를 가능하게하는 도구 git daemon는 많은 옵션과 기능을 갖지만이 간단한 일회성 기능을 활성화하기 위해 "내가있는 리포지토리를 제공"하기 위해이 도구를 사용하는 방법은 별칭을 만드는 것입니다. 나는 그것을 부르고 싶다 git serve. 운영:

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

git 별명은 작업 트리의 기본 디렉토리에서 실행되므로 별명을 사용하는 것이 실제로 중요합니다. 따라서 경로 '.git'은 저장소의 디렉토리 트리에 있더라도 항상 올바른 위치를 가리 킵니다.

다음 git serve과 같이 새 것을 사용하십시오 .

  1. 를 실행하십시오 git serve. "럼블 준비 완료"라고보고합니다. 힘내는 나쁜 것입니다.
  2. IP 주소를 찾으십시오. 192.168.1.123이라고 가정하십시오.
  3. "이봐 제인,이 커밋을 원산지로 만들 준비가되지 않았지만 실행할 때 커밋을 복제본으로 가져올 수 있습니다 git fetch git://192.168.1.123/"라고 말합니다.
  4. 해당 리포지토리를 더 이상 제공하지 않으려면 ctrl + c를 누르십시오.

Jane에게 git clone git://192.168.1.123/ local-repo-name아직 저장소 복제본이없는 경우 Jane에게 알릴 수도 있습니다 . 또는 git pull git://192.168.1.123/ branchname한 번에 가져 오기 및 병합을 사용하여 기능 분기에서 함께 작업하는 경우 유용합니다.

그러나 인증이 없기 때문에 리포지토리에 비밀을 유지하는 경우 적대적인 네트워크에서는이 작업을 수행하지 않아야합니다. 그것은 존재를 알리지 않지만 포트 스캐너를 가진 사람은 그것을 찾아서 연결하고 레포를 복제 할 수 있습니다.

그러나 기본적으로 읽기 전용이므로 매우 위험하지 않습니다. git daemon쓰기 액세스를 활성화하려는 경우 맨 페이지를주의 해서 읽으십시오 . 공동 작업자의 커밋을 얻으려는 경우 읽기 전용으로 남겨두고 공동 작업자 에게이 명령을 실행하도록 요청하는 것이 훨씬 안전합니다.

접선 적으로 관련됨 : 일회용 서버의 주제에서 HTTP를 통해 여러 정적 파일을 일시적으로 공유하려는 경우 : python -m SimpleHTTPServer


11

GitBlit을 사용하는 것보다 좋고 쉬운 GIT 서버가 필요한 경우. 또한 나는 gitolite를 사용하지만 GitBlit을 사용하면 서버, 관리자, 저장소에 모두 있습니다. 관리자 ... URL : http://gitblit.com/


9

https://rhodecode.com 은 Git & Mercurial 용 오픈 소스 웹 앱으로 모든 운영 체제 (설치 프로그램 포함)에서 매우 쉽게 설치할 수 있습니다.

RhodeCode (RhodeCode Enterprise라고하는 새로운 버전)는 코드 검토와 같은 누락 된 Git 기능을 추가하며 일반적으로 매우 빠르고 안정적으로 말합니다.


1
code.gmgauthier.com 에서 실제로 내 인스턴스를 실행 합니다. 3.x 릴리즈는 매우 깨끗하고 안정적입니다. 실제로 코드보다 훨씬 많이 사용합니다 (실제로 많은 것이 있지만). 개인 저널의 마스터 카피, 두 권의 책 원고, 팟 캐스트 스크립트 및 블로그 초안을 보관하는 데 사용합니다. Markdown과 RestructuredText를 모두 렌더링하여 드래프트를 어디에서나 쉽게 읽을 수 있기 때문에이 방법에 이상적입니다.
Greg Gauthier

8

또한 Indefero 를 설치할 수 있습니다. Subversion과 Git을 모두 지원하므로 GoogleCode의 GPL 복제본이므로 원활한 전환이 가능합니다. 저는 Indefero의 저자입니다.


나는 그것을 사용하고 그것을 좋아한다. 그러나 디자인은 약간 구식입니다. 여전히 유지됩니까?
Jaroslav


8

그것은 할 수 없는 가장이 될 일반적인 I 기업 저장소에 대해 하나 개의 꽤 단단한 대안이다라고 말하고 싶지만, 자식 서버 설정,하지만 서로 다른 레이아웃, 도구, 미러링 및 권한 계획으로 연주 한 게 리트 가 더로 알려져있다 놀라게 보일 수 있습니다, 코드 검토 도구. 우리는 코드 검토로 사용하기 시작했고 천천히 g3 / gitolite를 사용하지 않는 주요 저장소가되었습니다.

  • 배포하는 것이 간단합니다 (기본적으로 .war를 바람둥이에 버립니다)
  • 저장소, 그룹 및 권한 (또는 ssh cli)을 관리하는 웹 UI가 있습니다.
  • 내장 Java ssh 및 git 구현이 있으므로 설정할 다른 항목이 없습니다.
  • 사용자 및 그룹에 대한 LDAP 지원 (일반적으로 회사의 필수)
  • 매우 유연한 권한 시스템 (프로젝트 그룹, 권한 상속, 읽기 / 쓰기 / 분기 / 검토되지 않은 쓰기 등 제한)
  • 코드 검토 기능 (당신이 그것에 있다면)
  • 리포 미러링 (일부 리포지토리를 github 또는 다른 공개 리포지토리로 푸시)

또한 대형 프로젝트 (예 : 안드로이드, 크롬)에서 사용되므로 확장이 가능하고 상당히 견고합니다. 코드 검토 부분을 우회하도록 허용하려면 사용자에게 PUSH 권한을 부여하십시오.


7

원격 호스팅을 위해 다른 사람들이 bitbucket.org가 무료 개인 저장소를 제공 한다고 말했듯 이 문제없이 사용했습니다.

로컬 또는 LAN 네트워크의 경우이 하나의 scm-manager.org 를 추가합니다 (단일 실행 파일은 설치가 간단하고 Java로 만들어져 Linux 또는 Windows에서 실행될 수 있습니다). 설치하는 경우를 대비하여 기본 비밀번호입니다.

Username: scmadmin
Password: scmadmin

3
기본 자격 증명을 제공해 주셔서 감사합니다.
라이언 윌리엄스

6

그 동안 Mercurial 호스팅 사이트 인 Bitbucket 은 Git 리포지토리도 제공하기 시작했습니다.

따라서 로컬 서버 가 필요하지 않은 경우 개인 Git 리포지토리를 무료로 호스팅 할 수있는 중앙 위치에 IMO Bitbucket이 가장 적합합니다.

무료로 개인 및 공용 Git 및 Mercurial 리포지토리를 무제한 이용할 수 있습니다.
유일한 제한은 무료 요금제에서 최대 5 명의 사용자가 개인 리포지토리에 액세스 할 수 있다는 것입니다 (더 많은 비용을 지불해야 함).
자세한 내용은 https://bitbucket.org/plans 를 참조 하십시오 !



2

중앙 위치에 리포지토리를 원한다면 Git과 같은 분산 버전 제어를 사용하면 매우 쉽습니다.
중앙 리포지토리를 중앙 시스템의 일부 공유 폴더에 저장하면 누구나 복제 할 수 있습니다.

로컬 서버에서 "실제"웹 사이트를 원한다면 Git 호스팅 웹 사이트 http://repo.or.cz를 알고 있습니다 .
GitHub보다 기능이 적은 것 같지만 GitHub와 달리 소스 코드를 가져 와서 자체 로컬 서버에서 호스팅 할 수 있습니다.

면책 조항 : repo.or.cz에 대해서만 읽었으며 직접 시도하지 않았습니다!


2

간단한 설정을 위해 중앙 서버에 대한 ssh 액세스를 제공하고이 '원본'에서 푸시 / 풀하도록 각 사용자의 작업 디렉토리를 설정할 수 있습니다. 소규모 팀에게는 가장 간단하고 일반적인 설정입니다.

http 서버와 원격으로 관리 할 수있는 기능을 제공하는 gitosis를 살펴볼 수도 있습니다. 그렇게하면 ssh 액세스 권한을 부여 할 필요가 없으며 각 커미터에 관련된 모든 것을 부여합니다.


2

Chris가 말한 내용에 추가하기 위해 gitosis (http://eagain.net/gitweb/?p=gitosis.git)를 사용하여 실제로 리포지토리에 액세스 할 수있는 사람을 제어 할 수 있습니다.

사용법에 따라 로컬 시스템에서 푸시 할 때 코드가 서버의 파일 시스템으로 자동으로 끌어 오도록 후크 (.git / hooks 폴더에 있음)를 사용할 수도 있습니다. http://utsl.gen.nz/git/post-update 에서 널리 사용되는 스크립트는 다음과 같습니다 . 모든 경우에 필요한 것은 아닙니다.


갱신 후 스크립트에 대한 링크는 ... 죽은
모르 텐 젠슨


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.