SSH를 통해 Git 저장소를 폴더로 푸시하려면 어떻게해야합니까? mnt / foo

git init , git commit -a 등을 수행 한 my-project라는 폴더가 있습니다 .

이제 원격 서버의 / mnt / foo / bar에있는 빈 폴더로 푸시하려고합니다.

어떻게해야합니까?

내가 읽은 내용에 따라 시도했습니다.

cd my-project
git remote add origin ssh://user@host/mnt/foo/bar/my-project.git
git push origin master

그것은 옳지 않은 것처럼 보였고 (출처가 목적지보다 먼저 올 것이라고 가정합니다)

fatal: '/mnt/boxee/git/midwinter-physiotherapy.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

원격 호스트에 액세스 할 때마다 매번 Git 저장소를 수동으로 초기화 할 필요가 없도록 작동하고 싶습니다 … 그렇게해야합니까? 내가 올바른 길을 가고 있습니까?

감사.



답변

명령이 정확합니다. 그러나 원격 주소는 초기화 된 Git 리포지토리도 가리켜 야합니다. 하지만 일회성입니다.

ssh user@host "git init --bare /mnt/foo/bar/my-project.git"

Git에서 “베어”저장소는 작업 트리가없는 저장소입니다.


답변

리포지토리로 푸시 하고 파일을 서버 에서 업데이트하려면 서버 측 git hook을 만들어 파일을 푸시 한 후 체크 아웃 할 수 있습니다. 에서 서버 측 자식 /hooks/디렉토리라는 이름의 파일을 생성 post-receive다음 코드 (폴더 구조와 일치하는 디렉토리를 업데이트)를 추가합니다 :

#!/bin/sh
git --work-tree=/var/www/domain.com --git-dir=/var/repo/site.git checkout -f

그런 다음 파일을 사용하여 적절한 권한을 부여하십시오. chmod +x post-receive

자세한 정보 및 자세한 설명은
https://www.digitalocean.com/community/tutorials/how-to-set-up-automatic-deployment-with-git-with-a-vps


답변

서버에서 수동으로 저장소를 작성하지 않으려면 gitosis를 설치 하면 프로세스가 자동화됩니다. 그러나 리포지토리를 만들려면 서버에 프로세스가 있어야합니다. 클라이언트의 git ssh 연결을 통해 할 수는 없습니다.