GoDaddy 호스팅 계획에서 git repo 설정


14

git을 사용하여 버전 제어되는 프로젝트가 있습니다.

내가 할 수있는 것은 FTP를 드래그 앤 드롭하지 않고 푸시로 배포 할 수 있도록 내 (ssh 지원) GoDaddy 공유 호스팅 패키지에 저장소를 설정하는 것입니다.

모든 팁을 주시면 감사하겠습니다. 이미 해낸 사람의 계정이 가장 좋지만 온라인에서 개인적으로 찾을 수 없었습니다.


StackOverflow에서 더 나은 답변을 얻을 것입니다.
mrTomahawk

네, 둘 사이에 던졌습니다. 교차 게시를 시도 할 수 있습니다. 감사.
Tom Wright

아직 git repo를 설정하지 않았지만 어떻게 소스 코드 서버 프로그래밍을 설정합니까? -내 투표는 serverfault에 대한 것입니다
serverhorror

1
아마도 그렇지는 않지만 개발자는 우리가 그것을 설정하도록 우리를 믿지 않기 때문에 그것에 대해 알 것입니다.
tomjedrz 2016 년

1
물론 일이 tomjedrz 및 완전성을 위하여 : stackoverflow.com/questions/1003885/...
톰 라이트

답변:


23

HostNine 공유 호스팅 패키지에서 호스팅 한 사이트와 동일한 문제가 발생했습니다. 그들은 또한 당신에게 ssh액세스 권한을 부여 하지만 불행히도 git설치되지 않았으며 run에 대한 액세스 권한도 부여하지 않아 gcc사용자를 위해 git을 다운로드하고 설치하는 것이 다소 어렵습니다.

이 제한 사항을 해결하기 위해 생각할 수있는 유일한 방법은 git 바이너리를 다른 컴퓨터에서 복사하는 것입니다. 아마도 동일한 솔루션이 귀하와 GoDaddy 공유 호스트에서 작동 할 것입니다. 내가 한 일은 다음과 같습니다.


먼저 서버의 아키텍처를 파악하십시오. 제 경우에는 32 비트 (i386)였습니다. 이를 알아낼 수있는 몇 가지 방법이 있습니다.

# uname -a
Linux ___.myserverhosts.com 2.6.18-128.1.6.el5PAE #1 SMP Wed Apr 1 10:02:22 EDT 2009 i686 i686 i386 GNU/Linux

# file /bin/echo
/bin/echo: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped

다음으로 동일한 아키텍처와 git이 설치된 Linux를 실행하는 다른 컴퓨터를 찾아야합니다. 동일한 아키텍처이고 필요한 바이너리 및 라이브러리 파일을 찾을 수있는 한 동일한 배포 또는 버전의 Linux를 실행할 필요조차 없습니다.

메인 git 바이너리의 위치를 ​​찾으려면

> which git
/usr/local/bin/git

와 같은 다른 중요한 바이너리 git-receive-pack도 같은 디렉토리에 상주하므로 /usr/local/bin/git*필요한 모든 것을 얻을 수 있도록 모두를 복사하는 것이 좋습니다 .


git이 의존하는 다른 중요한 파일은 소스 시스템의 'libexec'디렉토리에 있습니다. 이것을 복사하지 않으면 git push내가 한 것처럼 놀라운 오류 메시지가 나타날 수 있습니다 .

git: 'index-pack' is not a git-command. See 'git --help'.

target_host에서 핵심 git 라이브러리를 포함하는 디렉토리를 찾으려면 다음을 사용하십시오.

> git --exec-path
/usr/local/libexec/git-core

먼저 해당 파일을 복사 한 다음 누락 된 공유 라이브러리에 대해 불평하는지 확인하기 위해 git을 실행하는 것이 좋습니다. 그렇지 않다면, 아마도 당신은 갈 것입니다. 그렇다면 계속 읽으십시오. (공유 라이브러리가 대상 호스트에 이미 존재하고 올바른 버전 인 경우 공유 라이브러리를 통한 복사는 사용하지 마십시오.)

당신이 파일을 복사 할 수 있습니다 scp, rsync, ftp, 또는 당신이 편안 뭐든간에. 나는 scp다음과 같이 사용했다.

> ssh target_host 'mkdir -p ~/bin ~/libexec'
> scp /usr/local/bin/git* target_host:~/bin
> scp -r /usr/local/libexec/git-core target_host:~/libexec

그런 다음 target_host로 ssh하십시오. 다음과 같은 줄을 추가해야합니다 ~/.bashrc.

export PATH=$PATH:~/bin
export LD_LIBRARY_PATH=~/lib
export GIT_EXEC_PATH=~/libexec/git-core

이 단계를 잊어 버린 경우 다음 작업을 수행 할 때이 오류가 표시 될 수 있습니다 git push.

git-receive-pack: command not found

이것은 git.or.cz의 Git FAQ에 문서화되어 있습니다 :

기본적으로 문제는 'git-receive-pack'이 원격 쪽의 기본 $ PATH에 없다는 것입니다.

...

  • 당신이에서 설정 한 올바른 경로를 만들기 .bashrc(뿐만 아니라 .bash_profile)

GIT_EXEC_PATH에 문서화되어 있습니다 man git:

   --exec-path
       Path to wherever your core git programs are installed. 
       This can also be controlled by setting the GIT_EXEC_PATH
       environment variable. If no path is given, git will print
       the current setting and then exit.

당신의 새로운 소스 ~/.bashrc. 이제 실행 해보십시오 git.


이것이 처음으로 나에게 준 것입니다.

> git
git: error while loading shared libraries: libcrypto.so.4: cannot open shared object file: No such file or directory

소스 머신에서 이것을 실행하여 복사 할 공유 라이브러리의 위치를 ​​알 수있었습니다.

> ldd /usr/local/bin/git
libz.so.1 => /usr/lib/libz.so.1 (0xb7fcf000)
libcrypto.so.4 => /lib/libcrypto.so.4 (0xb7ee4000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0xb7ed2000)
libc.so.6 => /lib/tls/libc.so.6 (0xb7da6000)
libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0xb7d92000)
libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0xb7d2d000)
libcom_err.so.2 => /lib/libcom_err.so.2 (0xb7d2a000)
libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0xb7d08000)
libresolv.so.2 => /lib/libresolv.so.2 (0xb7cf5000)
libdl.so.2 => /lib/libdl.so.2 (0xb7cf1000)
/lib/ld-linux.so.2 (0xb7fe8000)

제 경우에는 그냥 복사했습니다 /lib/libcrypto.so.4까지 ~/lib내에서 target_host모든 것이 잘되었다.


이제 git공유 호스팅 서버 에서 작업 하고 있어야합니다.

이제 서버에서 새 자식 저장소와 작업 트리를 작성하거나 기존 저장소 / 작업 트리를 복사해야합니다.


그건 그렇고, 베어 리포지토리가 포함 된 파일 과 달리 실제 콘텐츠 파일 을 배포 하려고한다고 말했기 때문에 베어 리포지토리 가이 경우 서버에서 원하는 것으로 생각하지 않습니다. config HEAD objects/ refs/당신은 git push.

toolmantim.com 은 일반 git 저장소와 Bare 저장소의 차이점을 설명합니다.

기본 git 리포지토리는 작업 디렉토리로 사용한다고 가정하므로 git은 실제 베어 리포지토리 파일을 모든 프로젝트 파일과 함께 .git 디렉토리에 저장합니다. 원격 저장소는 작업 사본과 달리 파일 시스템에 파일 사본이 필요하지 않습니다. 필요한 것은 저장소 자체의 델타 및 바이너리입니다. 이것이 바로 "베어"가 자식을 의미하는 것입니다. 저장소 자체 만.


target_host웹 사이트를 배포하려는 위치 (또는 배포하려는 대상) 에 이미 디렉토리를 만들었다 고 가정합니다 . 그 디렉토리를 호출하자 ~/www/my_site. 모든 파일을 ftp로 복사했을 수도 있습니다 ~/www/my_site already. (당신이 가지고 있는지 여부는 중요하지 않습니다.) 또한 .git 하위 디렉토리를 이미 복사하지 않았다고 가정합니다 ~/www/my_site(그렇다면 잘 작동합니다).

target_host에 초기화 된 git 저장소가 없으므로 첫 번째 단계는 하나를 작성하는 것입니다.

> cd ~/www/my_site
> git init

그런 다음 배포하려는 최신 변경 사항이있는 리포지토리가있는 호스트 (개발 상자, 추측 할 것입니다)에서 배포하려면 다음과 같이해야합니다.

> git push --all ssh://username@target_host:port/~/www/my_site/.git

저장소 target_host가 최신 상태가 아닌 경우 다음과 같은 경고가 표시 될 수 있습니다 .

> warning: updating the current branch
> warning: Updating the currently checked out branch may cause confusion,
> warning: as the index and work tree do not reflect changes that are in HEAD.
> warning: As a result, you may see the changes you just pushed into it
> warning: reverted when you run 'git diff' over there, and you may want
> warning: to run 'git reset --hard' before starting to work to recover.
> warning: 
> warning: You can set 'receive.denyCurrentBranch' configuration variable to
> warning: 'refuse' in the remote repository to forbid pushing into its
> warning: current branch.
> warning: To allow pushing into the current branch, you can set it to 'ignore';
> warning: but this is not recommended unless you arranged to update its work
> warning: tree to match what you pushed in some other way.
> warning: 
> warning: To squelch this message, you can set it to 'warn'.
> warning: 
> warning: Note that the default will change in a future version of git
> warning: to refuse updating the current branch unless you have the
> warning: configuration variable set to either 'ignore' or 'warn'.

(정상적인 git사용법 에서는 일반적으로 베어 리포지토리로 푸시하기 때문에 해당 메시지를 볼 수 없습니다 . 그러나이 경우 원격 리포지토리는 작업 트리와 인덱스가 모두있는 일반적인 리포지토리 git이므로 이해할 수 있다고 우려합니다. 무언가를 엉망으로 만듭니다.)

그러나 서버에서 저장소에 직접 커밋하지 않을 것이기 때문에 서버에서 '무시'로 설정하는 것이 안전하다고 생각합니다. (모든 커밋은 개발 저장소에서 시작한 다음 서버로 푸시되어야합니다.)

계속해서 다음을 누를 때마다 경고가 표시되지 않도록 설정하십시오.

> ssh target_host 'cd ~/www/my_site/; git config receive.denyCurrentBranch ignore'

push자체에만 업데이트 인덱스 그러나, 하지 작업 트리 자체에있는 파일. 이러한 파일을 업데이트하는 것은 우리가하려는 일의 전체 요점 일뿐이므로 git인덱스의 내용을 작업 트리 자체에 다음과 같이 쓸 때까지 작업이 수행되지 않습니다 .

> ssh target_host 'cd ~/www/my_site/; git reset --hard'

(참고 : 서버의 작업 트리에서 변경 한 내용은 리포지토리에있는 내용으로 덮어 씁니다.)

또한 mattikus의 제안을 따르고 서버에 대한 원격을 만들었습니다.

> git remote add h9 ssh://username@target_host:port/~/www/my_site/.git

이제 배포하기 위해해야 ​​할 일은 다음과 같습니다.

> git push --all --force h9
> ssh remote_host 'cd ~/www/my_site/; git reset --hard'

심지어 script/deploy배포 할 때마다 하나의 명령 만 실행하면되므로 이름이 지정된 스크립트에 이러한 명령을 던지기까지했습니다 .

이 지침에 실수가 있거나 더 나은 해결책을 알고 있다면 알려주십시오.


놀랄 만한! 가능한 경우 노력에 대해 +10했습니다.
icc97

2

나는 SF와 godaddy n00b입니다. 나와 함께 견뎌내십시오. 그러나 어쨌든, 나는 여기서 논의되는 것을 매우 기쁘게 생각합니다.

단지 $ 0.02, 리눅스 박스에 git을 동적으로 구축하려고 시도했습니다. 내 godaddy 계정으로 가져 가려고했습니다. 패시브 godaddy 머신으로 푸시하려고 시도하더라도 openssl이 없어서 실패합니다. 아마도 openssl을 사용하여 git을 정적으로 빌드하려고 시도하지만 나쁜 생각처럼 느껴집니다.

$ git remote add godaddy ssh://unclecj@sveningsson.info//home/content/u/n/c/unclecj/foo.git

$ git push godaddy master
bash: git-receive-pack: command not found
fatal: The remote end hung up unexpectedly

$ git push --receive-pack="/home/content/u/n/c/unclecj/opt/git-1.6.3/bin/git-receive-pack" godaddy master
/home/content/u/n/c/unclecj/opt/git-1.6.3/bin/git-receive-pack: error while loading shared libraries: libcrypto.so.0.9.8: cannot open shared object file: No such file or directory
fatal: The remote end hung up unexpectedly

주제를 벗어난 것이지만, 이것이 godaddy로부터 기대해야 할 일종의 지원 부족입니까, 대신 dreamhosts를 선택하지 않는 것을 후회해야합니까?

감사합니다 CJ

추신. 대답은 아니지만 일단 git-receive가 godaddy에서 작동한다는 제안은 (그렇습니까?), 분리 된 worktree가있는 저장소는 웹에 배포하는 좋은 방법입니다 : http://toroid.org/ams/git- 웹 사이트-하우투


0

가장 쉬운 방법은 원격 서버에서 다음과 같은 것을 실행하는 것입니다.

mkdir repo.git
cd repo.git
git init --bare 

그런 다음 당신의 디벨 체크 아웃에서 :

git push --all ssh://<username>@<your server>/~/path/to/repo/relative/to/homedir/repo.git

서버 나 기타 필요한 것은 없으며 ssh 액세스 권한이있는 한 해당 시스템에서 가져 오기 / 풀을 할 수 있어야합니다.

.ssh / config도 설정 한 경우이를 활용하고 설정 한 개인 키를 사용해야합니다.

업데이트를 많이 배포하려는 경우, devel checkout에 원격 저장소를 추가 할 수 있습니다.

git remote add godaddy ssh://<username>@<your server>/path/to/repo.git

그런 다음부터 다음을 수행 할 수 있습니다.

git push godaddy

자세한 내용은 온라인 문서를 확인git push 하거나 실행 git push --help하여 해당 지역의 매뉴얼 페이지를 시작하십시오.


1
원격 서버의 git 설치가 더 복잡합니다. 귀하의 답변 (유용하지만)은 표준 방식으로 리포지토리 생성을 설명합니다.
Tom Wright

1
아 알겠다. 나는 그것을 생각하지 않았다. 당신은 godaddy의 호스팅 지원을 이메일로 보낼 수 있고 그들이 당신을 위해 git을 설치할 수 있는지, 아니면 직접 빌드 할 수있는 최소한의 뎁을 볼 수 있을지 모릅니다. 그렇지 않은 경우 실행중인 아키텍처를 파악하고 유사한 아키텍처에서 직접 컴파일하여 업로드 할 수 있습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.