답변:
원격 위치에 베어 리포지토리를 만들고 git init --bare
로컬 리포지토리 ( git remote add origin URL
) 의 푸시 / 풀 트래커로 원격 측을 추가 한 다음 로컬이라고 말합니다 git push origin master
. 이제 다른 저장소는 pull
원격 저장소에서 가능합니다.
git push origin master
오류 "을 (를) 찾을 수 없습니다 저장소"와 함께 실패, 시도 git update-server-info
당신이 한 경우, 원격 측에git init --bare
git update-server-info
했지만 오류가 발생합니다 fatal: Unable to look up Volumes (port 9418) (nodename nor servname provided, or not known)
Git 서버를 처음 설정하려면 기존 리포지토리를 새로운 기본 리포지토리 (작업 디렉토리가없는 리포지토리)로 내 보내야합니다. 이것은 일반적으로 간단합니다. 새 Bare 저장소를 작성하기 위해 저장소를 복제하려면 --bare
옵션 과 함께 clone 명령을 실행하십시오 . 기본적으로 Bare 저장소 디렉토리는 다음 .git
과 같이 끝납니다 .
$ git clone --bare my_project my_project.git
Initialized empty Git repository in /opt/projects/my_project.git/
이 명령은 작업 디렉토리없이 Git 리포지토리 자체를 가져 와서 단독으로 디렉토리를 만듭니다.
저장소의 사본이 준비되었으므로 서버에 저장하고 프로토콜을 설정하기 만하면됩니다. git.example.com
SSH 액세스 권한이 있는 서버를 설정했으며 모든 Git 리포지토리를 /opt/git
디렉토리 에 저장하려고 한다고 가정 해 봅시다 . 베어 리포지토리를 복사하여 새 리포지토리를 설정할 수 있습니다.
$ scp -r my_project.git user@git.example.com:/opt/git
이때 /opt/git
디렉토리에 대한 읽기 액세스 권한이있는 동일한 서버에 대한 SSH 액세스 권한이있는 다른 사용자는 다음을 실행하여 저장소를 복제 할 수 있습니다.
$ git clone user@git.example.com:/opt/git/my_project.git
사용자가 서버에 SSH로 접속하여 /opt/git/my_project.git
디렉토리에 대한 쓰기 액세스 권한이 있으면 자동으로 푸시 액세스 권한도 부여됩니다. --shared
옵션으로 git init 명령을 실행하면 Git은 그룹 쓰기 권한을 저장소에 자동으로 추가합니다 .
$ ssh user@git.example.com
$ cd /opt/git/my_project.git
$ git init --bare --shared
Git 리포지토리를 가져 와서 베어 버전을 생성하여 사용자와 공동 작업자가 SSH 액세스 권한이있는 서버에 배치하는 것은 매우 쉽습니다. 이제 동일한 프로젝트에서 공동 작업 할 준비가되었습니다.
scp
솔루션은 실제보다 IMO가 더 잘 작동합니다 init --bare
. 처음에는 로컬로 복제 한 다음 서버에 복사하지만 여전히 git이 한 번에 명령을 수행하기를 원하지만 추악한 해킹을 느낍니다.
--shared
. 나는 당신 git init --shared
이 --bare
하나 를 만들지 않고 사용하면 어떻게되는지 궁금합니다 .
scp
원격이 지원하지 않으면 원격에 대한 저장소 가 더 잘 작동합니다 git init --bare
(git 1.5.5, 2008의 경우와 마찬가지로). 리모컨에 자식이 전혀 없어도 작동해야한다고 생각합니다.
Windows에서 로컬 사본을 작성하고 Unix 라인 시스템에서 해당 원격 저장소를 작성하려는 사용자를위한 참고 사항. 텍스트 파일은 Unix 계열 시스템의 개발자가 추가 복제본에서 LF로 끝나지만 Windows에서는 CRLF로 끝납니다.
줄 끝 번역 을 설정하기 전에 Windows 리포지토리를 만든 경우 문제가 있습니다. Git의 기본 설정은 변환되지 않으므로 작업 세트는 CRLF를 사용하지만 리포지토리 (예 : .git에 저장된 데이터)도 파일을 CRLF로 저장했습니다.
원격으로 푸시하면 저장된 파일이 그대로 복사되고 줄 끝 변환이 발생하지 않습니다. (줄 끝 변환은 저장소를 푸시 할 때가 아니라 파일을 저장소에 커밋 할 때 발생합니다). 유닉스 계열 저장소에서 CRLF를 사용하면 원하는 것이 아닙니다.
원격 저장소에서 LF를 가져 오려면 Windows 저장소를 다시 정규화하여 먼저 LF가 로컬 저장소에 있는지 확인해야 합니다 . 여전히 CRLF 엔딩이있는 Windows 작업 세트에는 눈에 띄는 영향을 미치지 않지만 리모컨으로 푸시하면 리모컨에 LF가 올바르게 표시됩니다.
Windows 리포지토리에 어떤 줄 엔딩이 있는지 쉽게 알 수 있는지 확실하지 않습니다. core.autocrlf = false를 설정 한 다음 복제하여 리포지토리를 테스트 할 수 있습니다 (리포지토리에 LF 엔딩이 있으면 클론은 LF도).
위의 두 가지 인기있는 솔루션에는 흥미로운 차이점이 있습니다.
다음과 같이 Bare 저장소를 작성하는 경우 :
cd / outside_of_any_repo mkdir my_remote.git cd my_remote.git 자식 초기화-베어
그리고
cd /your_path/original_repo
git remote add origin /outside_of_any_repo/my_remote.git
git push --set-upstream origin master
그런 다음 git은 다음과 같은 관계로 'original_repo'에서 구성을 설정합니다.
original_repo origin --> /outside_of_any_repo/my_remote.git/
후자는 업스트림 리모컨으로 사용됩니다. 업스트림 리모컨에는 구성에 다른 리모컨이 없습니다.
그러나 다른 방법으로하면 :
(original_repo 디렉토리에서) cd .. git clone --bare original_repo /outside_of_any_repo/my_remote.git
'my_remote.git'은 'origin'이 원격으로 'original_repo'를 가리키는 구성으로, 로컬 디렉토리 경로와 같은 remote.origin.url과 함께 구성으로 이동합니다. 이는 이동하려는 경우 적합하지 않을 수 있습니다 서버에.
"원격"참조가 적절하지 않은 경우 나중에 제거하기 쉽지만, 'original_repo'는 여전히 'my_remote.git'를 업스트림 리모컨 (또는 어디를 가든지)으로 가리 키도록 설정해야합니다. 공유 할 수 있습니다). 기술적으로는 접근법 # 2를 사용하여 몇 가지 단계를 더 수행하면 동일한 결과를 얻을 수 있습니다. 그러나 # 1은 더 적은 수의 단계로 서버로 이동하기에 적합한 로컬에서 생성 된 "중앙 베어 공유 리포지토리"를 만드는보다 직접적인 접근 방법으로 보입니다. 나는 그것이 원격 저장소가 원하는 역할에 달려 있다고 생각합니다. (그렇습니다. 이것은 여기 문서와 충돌 합니다 .)
주의 사항 : 실제 저장소로 로컬 시스템에서 테스트를 한 다음 결과를 파일별로 비교하여 위의 내용 (2019 년 8 월 초이 글에서)을 배웠습니다. 그러나! 나는 아직도 배우고 있으므로 더 정확한 방법이있을 수 있습니다. 그러나 내 테스트는 # 1이 현재 선호되는 방법이라는 결론을 내리는 데 도움이되었습니다.
원격 저장소는 일반적으로 작업 디렉토리가없는 Git 저장소 인 Bare 저장소입니다. 저장소는 협업 지점으로 만 사용되므로 디스크에서 스냅 샷을 체크 아웃 할 이유가 없습니다. Git 데이터 일뿐입니다. 가장 간단한 용어로, 베어 리포지토리는 프로젝트의 .git 디렉토리의 내용이며 다른 것은 없습니다.
다음 코드를 사용하여 git 저장소를 만들 수 있습니다.
$ git clone --bare /path/to/project project.git
원격 자식 저장소를 가지기위한 한 가지 옵션은 SSH 프로토콜을 사용하는 것입니다.
자체 호스팅이 SSH를 통한 Git의 일반적인 전송 프로토콜입니다. 서버에 대한 SSH 액세스가 이미 대부분의 장소에 설정되어 있기 때문입니다. 그렇지 않은 경우 쉽게 수행 할 수 있습니다. SSH는 또한 인증 된 네트워크 프로토콜이며, 유비쿼터스이므로 일반적으로 설정 및 사용이 쉽습니다.
SSH를 통해 Git 저장소를 복제하려면
ssh://
다음과 같이 URL을 지정할 수 있습니다 .$ git clone ssh://[user@]server/project.git
또는 SSH 프로토콜에 더 짧은 scp 유사 구문을 사용할 수 있습니다.
$ git clone [user@]server:project.git
위의 두 경우 모두 선택적 사용자 이름을 지정하지 않으면 Git은 현재 로그인 한 사용자를 가정합니다.
프로
SSH를 사용하는 장점은 많습니다. 첫째, SSH는 비교적 설정하기 쉽습니다. SSH 데몬은 일반적이며 많은 네트워크 관리자가 경험하고 있으며 많은 OS 배포판이 설치되어 있거나이를 관리 할 도구가 있습니다. 다음으로 SSH를 통한 액세스가 안전합니다. 모든 데이터 전송이 암호화되고 인증됩니다. 마지막으로 HTTPS, Git 및 로컬 프로토콜과 같이 SSH는 효율적이므로 데이터를 전송하기 전에 가능한 한 컴팩트하게 만듭니다.
단점
SSH의 부정적인 측면은 Git 리포지토리에 대한 익명 액세스를 지원하지 않는다는 것입니다. SSH를 사용하는 경우 사람들은 읽기 전용 용량으로도 시스템에 대한 SSH 액세스 권한이 있어야합니다. 따라서 SSH를 통해 저장소를 복제하여 검사하려는 오픈 소스 프로젝트에 SSH가 도움이되지는 않습니다. 회사 네트워크 내에서만 사용하는 경우 SSH가 처리해야하는 유일한 프로토콜 일 수 있습니다. 프로젝트에 대한 익명의 읽기 전용 액세스를 허용하고 SSH를 사용하려면 SSH를 설정해야하지만 다른 사용자가 가져올 수 있도록 SSH를 설정해야합니다.
자세한 내용은 참조를 확인하십시오. 서버에서의 Git-프로토콜
원격 서버에서 디렉토리를 작성해야합니다. 그런 다음 "git init"명령을 사용하여이를 저장소로 설정하십시오. 이것은 당신이 가진 각각의 새로운 프로젝트 (각 새로운 폴더)에 대해 수행되어야합니다
ssh 키를 사용하여 git을 이미 설정하고 사용했다고 가정하면 작업 디렉토리에서 실행될 때 원격을 설정하고 디렉토리를 git repo로 초기화하는 작은 Python 스크립트를 작성했습니다. 물론 모든 리포지토리에 대해 서버와 루트 경로를 알려주려면 스크립트를 한 번만 편집해야합니다.
여기를 확인하십시오-https: //github.com/skbobade/ocgi
일반적으로 init
명령을 사용하여 git repo를 설정할 수 있습니다
git init
귀하의 경우에는 이미 사용 가능한 리모콘에 대한 저장소가 있습니다. 원격 저장소에 액세스하는 방법에 따라 (url 내부의 사용자 이름 또는 확인을 처리하는 ssh 키 사용) clone
명령을 사용하십시오 .
git clone git@[my.url.com]:[git-repo-name].git
repo를 복제하는 다른 방법도 있습니다. 이 방법으로 컴퓨터에 저장소를 가져올 때 확인하는 ssh 키 설정이 있으면 호출합니다. 원격 저장소에 로그인하기 위해 비밀번호와 사용자 이름을 내부에 포함하려는 경우 다른 URL 조합이 있습니다.