Git을 사용하여 S3에 게시 하시겠습니까?


87

누구든지 이것을하는 방법을 알고 있습니까? 지금까지 Google을 통해 유용한 정보를 찾지 못했습니다.

로컬 리포지토리를 설정하고 git pushS3에 게시하는 데 사용하고 싶습니다.이 아이디어는 자산에 대한 로컬 버전 제어가 있지만 S3의 원격 스토리지입니다.

이 작업을 수행 할 수 있으며, 그렇다면 어떻게합니까?


1
OP, 현재 수락 된 답변은 제기 된 질문에 적용되지 않습니다. 더 큰 이익을 위해 업데이트가 가능할까요? 나는 s3fs실행 가능한 해결책 이라고 믿습니다 .
bnjmn

1
@Benjamin이 문제에 다시 관심을 가져 주셔서 감사합니다. 업데이트되었습니다.
Andrew

커밋의 백업 기록을 보존하기 위해 원격 리포지토리에 배포하고 git 후크 를 사용하여 S3 버킷 (예 :)과 동기화 하는 것이 합리적이지 s3cmd sync …않습니까?
Fabien Snauwaert

답변:


50

1 http://blog.spearce.org/2008/07/using-jgit-to-publish-on-amazon-s3.html을 통해 JGit 사용

jgit.sh를 다운로드하고 jgit로 이름을 바꾸고 경로에 넣으십시오 (예 : $ HOME / bin).

.jgit 구성 파일을 설정하고 다음을 추가합니다 (AWS 키 대체).

$ vim ~ / .jgit

accesskey: aws access key
secretkey: aws secret access key

.jgit 파일에 acl : public을 지정하지 않으면 S3의 git 파일이 개인용이됩니다 (원하는대로). 다음으로 리포지토리를 저장할 S3 버킷을 만들고 git-repos라고 부르고 업로드 할 git 리포지토리를 만들어 보겠습니다.

s3cmd mb s3://git-repos
mkdir chef-recipes
cd chef-recipes
git init
touch README
git add README
git commit README
git remote add origin amazon-s3://.jgit@git-repos/chef-recipes.git

위의 경우 s3cmd 명령 줄 도구를 사용하여 버킷을 생성했지만 Amazon 웹 인터페이스를 통해서도 수행 할 수 있습니다. 이제 S3로 푸시 해 보겠습니다 (S3와 상호 작용할 때마다 jgit을 사용하고 그렇지 않으면 표준 git을 사용하는 방법에 유의하십시오).

jgit push origin master

이제 다른 곳 (예 : cd / tmp)으로 이동하여 복제 해보십시오.

jgit clone amazon-s3://.jgit@git-repos/chef-recipes.git

업데이트 할 때가되면 (jgit은 merge 또는 pull을 지원하지 않기 때문에) 2 단계로 수행합니다.

cd chef-recipes
jgit fetch
git merge origin/master

2 Amazon S3에서 지원하는 FUSE 기반 파일 시스템 사용

  1. Amazon S3 계정을 만드십시오!

  2. 다운로드, 컴파일 및 설치하십시오. (설치 정보 참조)

  3. 다음 방법 중 하나를 사용하여 보안 자격 증명 (액세스 키 ID 및 보안 액세스 키)을 지정합니다.

    • passwd_file 명령 줄 옵션 사용

    • AWSACCESSKEYID 및 AWSSECRETACCESSKEY 환경 변수 설정

    • 홈 디렉토리에서 .passwd-s3fs 파일 사용

    • 시스템 전체의 / etc / passwd-s3fs 파일 사용

    • 이 작업을 수행

.

/usr/bin/s3fs mybucket /mnt

그게 다야! 이제 amazon 버킷 "mybucket"의 내용이 / mnt에서 읽기 / 쓰기 액세스 가능해야합니다.


1
이 지시를 따랐지만 The request signature we calculated does not match the signature you provided. Check your key and signing method하려고 하면 오류가 발생합니다 jgit push origin master. 내가 어떻게 할 수 있는지 아십니까?
john

4
왜 그냥 git을 사용하지 않습니까? 이 ... 단순한 AWS에서 원격 자식의 repo에 대한 추가 작업 / 물건을 많이처럼 보인다
cmcculloh

1
이 (실제) 답변을 업데이트 post-receive하여 GIT_WORK_TREE. 자세한 내용은 여기 를 참조하십시오. 나는 이것을 아주 잘 작동하게 만들었다 s3fs. 시작하는 데 도움을 주셔서 감사합니다.
bnjmn 2012

1
@cmculloh 아직 EC2 인스턴스가없는 경우 git repo를 보유하는 데 더 많은 문제와 장기적인 비용이 발생할 수 있습니다. 또한 S3 스토리지는 기본적으로 훨씬 더 내구성이 있습니다. EC2에서 동일한 내구성을 얻기 위해 당신은 어쨌든 S3에 스냅 샷을 백업해야 것
제레미

1
jgit 프로젝트 페이지가 egit [ eclipse.org/egit/] 프로젝트의 저장소 에 연결되도록 블로그 게시물이 업데이트 된 것으로 보이며 이로 인해 솔루션 1 전체가 혼란스러워집니다. 약간의 검색 후 jgit.sh를 다운로드하여 사용할 수있는 원본 jgit 프로젝트 페이지를 찾을 수 있습니다. 링크는 eclipse.org/jgit/download 입니다.
MN Islam Shihan

9

Dandelion은 Git 리포지토리를 S3 / FTP / SFTP와 동기화 상태로 유지하는 또 다른 CLI 도구입니다. http://github.com/scttnlsn/dandelion


누가 이것을 반대했는지 모르겠습니다. 로컬 버전 관리를위한 git 및 호스팅을위한 S3와 함께 증분 배포를하는 것이 목표 인 경우이 솔루션이 좋습니다. 그것이 질문 인 것 같습니다.
Tabrez 2014 년

8

git-s3 - https: //github.com/schickling/git-s3

당신은 실행해야합니다 git-s3 deploy

git repo의 모든 이점이 있으며 변경 한 파일 만 업로드 / 삭제합니다.
참고 : 배포는 git push를 통해 암시 적이 지 않지만 git hook을 통해 수행 할 수 있습니다.


14
참고로,이 사항에 따라 다릅니다 Composer차례에 의존하는, PHP.
Maarten

3

Golang 으로 작성된 mc aka Minio 클라이언트를 사용할 수 있으며 오픈 소스 Apache 라이선스에 따라 사용할 수 있습니다. Mac, Linux, Windows, FreeBsd에서 사용할 수 있습니다. mc mirror명령을 사용 하여 요구 사항을 달성 할 수 있습니다 .

mc GNU / Linux 다운로드

64-bit Intel from https://dl.minio.io/client/mc/release/linux-amd64/mc
32-bit Intel from https://dl.minio.io/client/mc/release/linux-386/mc
32-bit ARM from https://dl.minio.io/client/mc/release/linux-arm/mc
$ chmod +x mc
$ ./mc --help

Amazon S3 용 mc 구성

$ mc config host add mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
  • 액세스 / 비밀 키로 교체
  • 기본적으로 mc는 amazon S3의 서명 버전 4를 사용합니다.
  • mys3는 minio 클라이언트의 Amazon S3 별칭입니다.

github 로컬 리포지토리 / 디렉터리에서 이름mygithub 을 Amazon S3 버킷 이름으로 미러링mygithubbkp

$ ./mc mirror mygithub mys3/mygithubbkp

면책 조항 : 나는 Minio에서 일합니다


3

AWS CLI 및 Git (후크 포함)을 사용하여이 작업을 수행 할 수도 있습니다. Windows 10에서 작동하는지 확인했습니다. Linux / Mac에서 작동해야합니다.

커밋시 S3에 동기화 설정

  1. AWS CLI 설치
  2. IAM 프로그래밍 방식 액세스 자격 증명을 설정합니다 (S3로 제한 할 수 있으며 버킷으로 만 제한 할 수도 있음).
  3. 자격 증명으로 AWS CLI 구성
  4. AWS 콘솔 또는 CLI에서 S3 버킷을 생성합니다.
  5. 버킷이 비공개인지 확인합니다.
  6. bare기존 git 프로젝트의 새 git 저장소를 만듭니다 .
mkdir myproject.git
cd myproject.git
git init --bare

참고 : 베어 리포지토리를 사용하면 업스트림이되고 베어 리포지토리에는 S3 버킷에 업로드하려는 변경 사항 만 포함되며 무시 된 파일, 로컬 git 구성 등이 없습니다.

  1. 로이 후크를 설치 post-updatehooks베어의 myproject.git디렉토리.
    #!/bin/sh; C:/Program\ Files/Git/usr/bin/sh.exe
    # Sync the contents of the bare repo to an S3 bucket.
    aws s3 sync . s3://myproject/
    
  2. 올바른 S3 버킷 이름으로 후크를 업데이트합니다.
  3. 이제 myproject디렉토리 로 cd 하고 베어 리포지토리를 업스트림으로 추가하고 s3예를 들어 이름을 지정합니다 .
git remote add s3 path/to/bare/directory/myproject.git 

참고 : 베어 디렉토리 경로에 상대 경로를 사용할 수 있습니다.

테스팅

  1. 저장소에 변경 사항을 추가하고 커밋하십시오.
  2. s3변경 사항을 S3 버킷에 동기화하려는 경우 변경 사항을 업스트림으로 푸시합니다 .
  3. 지정한 S3 버킷에 변경 사항이 동기화되는 것을 볼 수 있으며 S3 버킷의 변경 사항을보고 모든 것이 작동했는지 확인할 수도 있습니다.

참조 :


이미 AWS CLI 및 Git이 설치되어 있으면 괜찮습니다. Git이 후크에 대해 알고 있고 IAM 사용자 및 프로그래밍 방식의 자격 증명을 설정하고 S3 버킷을 만드는 방법을 알고 있다고 가정합니다.
b01

그래서 이것이 두 개의 저장소가 로컬에 있고 베어 로컬 저장소가 사후 업데이트를 통해 s3에 동기화되도록 설정되어 있음을 올바르게 이해합니까?
Josiah

@Josiah 네 맞습니다. 꼭 필요한 것은 아니지만 베어 리포지토리에는 커밋 된 파일 만 포함되므로 S3에서 원하는 파일 만 동기화하는 데 도움이됩니다. 베어 리포지토리없이 이것을 시도했지만 S3 로의 동기화에서 일부 파일, 특히 .gitignore 파일의 모든 파일을 제외해야했습니다.
b01

1

단일 git 저장소에 대해 무료 인 deplybot ( http://deploybot.com/ ) 서비스를 사용할 수 있습니다 .

배포 모드 섹션에서 "자동"을 선택하여 배포를 자동화 할 수 있습니다.

지금 사용하고 있습니다. 매우 쉽고 유용합니다.


더 이상 무료가 아닙니다.
mxcl


-1

당신은 필요 JGit를 그것을 위해.

aws 자격 증명으로 사용자 디렉터리에 .jgit 파일을 저장하면 s3와 함께 git을 사용할 수 있습니다.

다음은 git URL이 어떻게 생겼는지입니다.

amazon-s3://.jgit@mybucket/myproject.git

당신은 당신이하는 모든 일을 할 수 git와를 jgit.

여기에서 전체 설정 가이드를 확인하세요.

https://metamug.com/article/jgit-host-git-repository-on-s3.html

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