ssh를 통한 git clone


233

git 저장소를 만든 프로젝트가 있습니다.

$ cd myproject  
$ git init  
$ git add .  
$ git commit  

다른 머신에서 베어 클론을 생성하고 싶었습니다.

$ cd ..  
$ git clone --bare myproject  ssh://user@server:/GitRepos/myproject.git  

클론을 실행했지만 답변을 인쇄하지 않았습니다. 서버 컴퓨터에 로그온하여 파일 저장 방법을 확인하려고했습니다. / GitRepos 경로가 비어 있으므로 복제본을 다시 수행하기로 결정했습니다.

$ git clone --bare myproject  ssh://user@server:/GitRepos/myproject.git

이번에는 대답은 다음과 같습니다.

치명적 : 대상 경로 'ssh : // user @ server : /GitRepos/myproject.git'이 이미 존재하며 빈 디렉토리가 아닙니다.

그러나 나는 길이 비어있는 것을 보았다.
무슨 일이야?


나는 달리기 git clone --bare가 당신이 생각하는 것을 할 것이라고 생각하지 않습니다.
Wolfer

3
나를 위해 ssh : //는 원격 프로토콜을 사용하는 대신 폴더를 만들었습니다. @ alec-the-geek의 답변을 사용하여 작업해야합니다. 이에 대한 선호 답변을 선택 하시겠습니까?
akauppi

1
@akauppi : 모든 답변 을 고려 하는 것은 OP의 책임 이지만, 만족할 때까지 답변을 선택할 의무 는 없습니다 . (물론, 그들에게 생각 나게하거나 대답을 받아들이는 데 필요한 추가 정보를 묻는 것은 아프지 않습니다!)
jvriesem

물론 @jvriesem. 이제 "그것은 당신의 일"을 제거 할 것입니다. 그러나 그것은 오래된 것입니다 ... :)
akauppi

답변:


219

이것은 아마도 질문과 직접 ​​관련이 없습니다. 그러나 내가 방금 만든 실수 중 하나는 OP에서 알 수 있듯이 URL 사양입니다 ssh://user@server:/GitRepos/myproject.git. 즉 절대 경로를 나타내는 후 콜론 :과 슬래시가 /있습니다.

그런 다음 Git 클론 을 찾았습니다 . ssh : 호스트 이름을 확인할 수 없습니다 – git, 개발 – Nicolas Kuttler ( git버전 1.7.9.5 에서 발생한 오류 이므로) :

처음에 사용한 명령의 문제점은 scp와 같은 구문을 사용하려고 시도했다는 것입니다.

... 또한 내 문제였습니다! 기본적으로와 git함께 ssh,

  • ssh://username@host.xz/absolute/path/to/repo.git/ -서버의 절대 경로에 대한 슬래시
  • username@host.xz:relative/path/to/repo.git/-콜론 ( ssh://서버의 상대 경로 가 없어야 함 ( username서버 시스템 의 홈 디렉토리와 관련 )

이것이 누군가를 돕기를 바랍니다,
건배!


84
작동하지 않습니다. ssh로 상대 경로를 지정하려면 ssh://접두사 를 잃어야합니다 . 방금 20 분 동안 이것을 알아 내려고 노력했습니다. git clone username@host.xz:relative/path/to/repo.git/작동해야합니다.
bobbaluba

2
데비안 8에서 git 2.1.4로 시험해 보았습니다. 첫 번째 시도에서 / GitRepos 아래에 디렉토리가 작성되지 않았으며 두 번째 시도에서 경로가 이미 존재한다고 불평했습니다. 원래 문제가보고 된 것처럼
dlsa

5
귀하의 의견 @bobbaluba (및 업데이트 된 답변) 때문에 20 분을 소비 할 필요가 없습니다. 감사!
olafure

143

GitHub의 리포지토리를 보려면 다음을 시도하십시오.

git clone ssh://git@github.com/<user>/<repository name>.git

ssh를 통해 복제하도록 git을 설정하려면 다음을 참조하십시오.


<user>는 github의 사용자 이름이거나 github의 전자 메일 주소입니까? 이 링크는 공개 키 생성 중에 전자 메일 주소를 사용하도록 제안하기 때문입니다. help.github.com/en/github/authenticating-to-github/… 시도한 후에도 (ssh 키 생성에 대한 빈 암호 문구) 여전히 github에서 저장소를 복제 할 수 없습니다. 추신 : 나는 에이전트에 키를 추가하지 않았습니다.
Minnie

gitlab도 마찬가지입니다. 그 전에 제안한대로 SSH 키 설정을 활성화해야합니다
Venkataraman R

45

서버를 호출하는 대상에서 clone 명령을 실행해야합니다. 그러나 로컬 클라이언트에서 ssh 서버를 실행하지 않아서 작동하지 않습니다. 이 접근법을 따르도록 제안하십시오 (메모리 에서이 작업을 수행하기 때문에 매뉴얼을 확인하십시오)

  1. 서버 머신에 로그인하십시오.
  2. 다음을 사용하여 Bare Repo 작성 git init --bare
  3. 클라이언트 시스템에서 리포지를 서버로 푸시 할 수 있습니다. git remote add origin ssh://user@server:/GitRepos/myproject.git뒤에git push origin master

좋은 충고! 이전에 순수 서버 -git-folders를 다루지 않은 신규 이민자에 대한 몇 가지 참고 사항 : 2. cd / GitRepos; mkdir myproject.git; git init --bare 전에 cd myproject.git. 여기서 작업 사본을 얻지 못할 것입니다-repo 파일과 폴더 (일반적으로 .git)는 당신을 위해 베어 져서 깃발의 이름입니다. 감사합니다
akauppi

2
"git init --bare"는 .git 디렉토리를 만들지 않습니다. 파일을 폴더에 직접 넣습니다. 원격 원점을 추가 할 때 다음과 같은 결과가 나타납니다.
dlsa

10

면책 조항 : 이것은 bobbaluba 의 코멘트 사본으로 향후 방문자에게 더 잘 보입니다. 그것은 다른 어떤 대답보다 나에게 도움이되었습니다.


예제로 ssh://사용할 때 접두사 를 삭제해야 합니다git clone

git clone git@github.com:owner/repo.git

5

이 시도.

1 단계:

ls -al ~/.ssh

여기에 이미지 설명을 입력하십시오

2 단계:

ssh-keygen 

(기본값은 enter 키 사용) 여기에 이미지 설명을 입력하십시오 3 단계 : 구성 파일을 설정하려면

vim /c/Users/Willie/.ssh/config

호스트 gitlab.com 호스트
이름 gitlab.com
사용자 git
IdentityFile ~ / .ssh / id_rsa

4 단계 :

git clone git@gitlab.com:<username>/test2.git

여기에 이미지 설명을 입력하십시오

5 단계 :
4 단계를 완료하면
1.test2.git 파일이 다운로드
되고 ~ / .ssh에 새 파일 (known_hosts)이 표시됩니다.
여기에 이미지 설명을 입력하십시오

추신 : 나는 스스로 id_rsa와 id_rsa.ub를 만들어서 Gitlab 서버에 전달합니다. 클라이언트 측 (Windows 및 Linux)에 두 키를 사용합니다.


4

힘내 101 :

git분산 버전 관리 시스템입니다. git을 시작하고 실행하기 위해 서버가 필요하지 않습니다. 여전히 멋져 보이기 때문에 그렇게하고 싶습니까? 여러 컴퓨터에서 단일 프로젝트로 작업하려는 경우에도 유용합니다.

따라서 "서버"를 실행하려면 실행해야합니다 git init --bare <your_project>.git. 빈 저장소가 만들어 져서 .git디렉토리의 구성 파일을 가져 가지 않고도 컴퓨터에서 가져올 수 있습니다 .

이 후에는 작동하도록 클라이언트에서 저장소를 복제 할 수 있지만 일부 클라이언트 (즉 git-gui)는 완전히 비어있는 저장소를 복제하지 못합니다. 이 문제를 해결하려면 다음을 실행해야합니다 cd <your_project>.git && touch <some_random_file> && git add <some_random_file> && git commit && git push origin master. (과거에 이전에 수행하지 않은 경우 해당 시스템의 git에 대한 사용자 이름과 이메일을 구성해야 할 수도 있습니다. 실제로 실행할 명령은 오류 메시지에 표시되므로 생략하겠습니다.)

따라서이 시점에서 간단히 실행하여 리포지토리를 모든 컴퓨터에 복제 할 수 있습니다 git clone <user>@<server>:<relative_path><your_project>.git. (다른 사람들이 지적했듯이 ssh://절대 경로를 사용하는 경우 접두사를 접두어로 사용해야 할 수도 있습니다 .) 클라이언트에서 서버로 이미 로그인 할 수 있다고 가정합니다. ( ssh원격 서버로 많은 것을 푸시하려는 경우 구성 파일 및 키 설정에 대한 보너스 포인트가 제공 됩니다.)

관련 링크 :
이것은 당신이 알아야 할 것을 거의 알려줍니다.
그리고 이것은 git의 기본 작업을 알고 있지만 때로는 정확한 구문을 잊어 버린 사람들을위한 것입니다.


이 두 링크는 ​​모두 죽었거나 예상했던 것을 표시하지 않는 것 같습니다.
Todd

2

git-flow, 3 개의 '포인트'또는 유스 케이스, git 중앙 저장소, 로컬 개발 및 프로덕션 머신을 포함하는 답변을 시도하고 싶습니다. 이것은 잘 테스트되지 않았습니다 .

나는 엄청나게 구체적인 명령을 내렸다. 말하는 대신에 <your folder>나는 말할 것이다 /root/git. 원래 명령을 변경하는 유일한 장소는 특정 서버 이름을로 바꾸는 것입니다 example.com. 폴더 목적을 설명하여 적절하게 조정할 수 있습니다. 혼란을 알려 주시면 답변을 업데이트하겠습니다.

서버의 자식 버전은 1.7.1입니다. 서버는 CentOS 6.3 (최종)입니다.

개발 머신의 git 버전은 1.8.1.1입니다. Mac OS X 10.8.4입니다.

중앙 리포지토리와 프로덕션 시스템은 동일한 시스템에 있습니다.

svn 사용자가 '서버'로 관련시킬 수있는 중앙 저장소는 다음과 같이 구성됩니다. /root/git모든 자식 저장소를 보관 하는 폴더 가 있습니다. 'flowers'라고 부르는 프로젝트에 대한 git 저장소를 만들고 싶습니다.

cd /root/git
git clone --bare flowers flowers.git

git 명령은 두 가지 메시지를 주었다 :

Initialized empty Git repository in /root/git/flowers.git/
warning: You appear to have cloned an empty repository.

걱정할 것이 없습니다.

개발 머신에서 다음과 같이 구성됩니다. /home/kinjal/Sites모든 프로젝트를 넣을 폴더 가 있습니다. 이제 중앙 자식 저장소를 얻고 싶습니다.

cd /home/kinjal/Sites
git clone root@example.net:/root/git/flowers.git

이것은 내가 물건을 추가 할 수있는 지점으로 안내합니다. 먼저 git flow를 설정했습니다.

git flow init -d

기본적으로 이것은 branch develop입니다. 여기에 내 코드를 추가하십시오. 그런 다음 중앙 자식 저장소에 커밋해야합니다.

git add .
git commit -am 'initial'
git push

이 시점에서 그것은 개발 지점으로 밀었다. 이것을 마스터 브랜치에 추가하고 싶습니다.

git flow release start v0.0.0 develop
git flow release finish v0.0.0
git push

릴리스 시작과 릴리스 완료 사이에 아무 것도 수행하지 않았습니다. 그리고 릴리스가 완료되면 두 파일을 편집하라는 메시지가 표시됩니다. 이것은 개발 브랜치를 마스터로 푸시했습니다.

중앙 git 리포지토리와 동일한 컴퓨터에있는 프로덕션 사이트에서 리포지토리를에 넣고 싶습니다 /var/www/vhosts/example.net. 나는 이미있다 /var/www/vhosts.

cd /var/www/vhosts
git clone file:///root/git/flowers.git example.net

프로덕션 시스템이 다른 시스템에있는 경우 git clone명령은 개발 시스템에서 사용 된 것과 유사합니다.


1

우선, 나는 GIT 기술이 약간 부족합니다.

그것은 .git숨겨진 디렉토리 인 폴더 만 포함하는 머신의 베어 리포지토리를 복제합니다 . 실행 ls -al하면 저장소 내부 .git또는 cd .git내부를 볼 수 있습니다.

더 많은 GIT 기술을 가진 사람이 도울 수 있도록 의도에 대한 설명을 추가 할 수 있습니까? 어떻게 계획하고 싶지 않습니까?


나는 명령을 잘못 해석했다. 내가 한 것은 현재 디렉토리 아래에 하위 디렉토리 트리 ssh : /myproject.git을 만드는 것입니다. 원격 디렉토리로 복제한다고 생각했지만 명령이 실제로하는 일은 리포지토리에서 복제하는 것입니다.
dlsa

0

내가 한 : git clone --bare "/ GITREPOSITORIES / RepoA" "ssh : // luc @ EERSTENASDS119J / volume1 / RepoA"결과 : 치명적 : 대상 경로 'ssh : // luc @ EERSTENASDS119J / volume1 / RepoA'가 이미 존재하며 빈 디렉토리가 아닙니다.

시스템은 현재 경로에 ssh : // luc @ EERSTENASDS119J / volume1 / RepoA 디렉토리를 작성했습니다.

따라서 git clone은 URL 사양을 해석하지 않았습니다. Alec의 해결 방법을 사용했습니다.


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