Gitを使用してS3に公開しますか?


87

誰かがこれを行う方法を知っていますか?これまでのところ、Googleで役立つものを見つけることができませんでした。

ローカルリポジトリをセットアップし、git pushそれをS3に公開するために使用したいと思います。つまり、アセットをローカルバージョンで管理し、S3ではリモートストレージを使用するというアイデアです。

これは可能ですか?もしそうなら、どのように?


1
OP、現在受け入れられている回答は、提起された質問には適用されません。より大きな利益のために更新することは可能でしょうか?私はs3fs実行可能な解決策であると信じています。
bnjmn 2012年

1
@Benjaminこれに注意を向けてくれてありがとう、更新されました。
アンドリュー

(コミットのバックアップ履歴を保持するために)リモートリポジトリにデプロイし、gitフックを使用してS3バケット(例:)と単純に同期することは意味がありませんs3cmd sync …か?
Fabien Snauwaert 2017

手順は次のとおり
ソーター

回答:


50

1 使用JGit経由http://blog.spearce.org/2008/07/using-jgit-to-publish-on-amazon-s3.html

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コマンドラインツールを使用してバケットを作成していますが、AmazonWebインターフェイスを介して作成することもできます。それをS3にプッシュしましょう(S3と対話するときは常にjgitを使用し、それ以外の場合は標準のgitを使用することに注意してください)。

jgit push origin master

次に、別の場所(cd / tmpなど)に移動して、クローンを作成してみます。

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

更新するときは(jgitはマージまたはプルをサポートしていないため)、2つのステップで更新します。

cd chef-recipes
jgit fetch
git merge origin/master

2 AmazonS3に裏打ちされたFUSEベースのファイルシステムを使用する

  1. Amazon S3アカウントを取得してください!

  2. ダウンロード、コンパイル、インストールします。(InstallationNotesを参照)

  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ます。どうすればそれをなくすことができるのでしょうか?
ジョン2012

4
なぜあなたはただgitを使わないのですか?これは、awsの単純なリモートgitリポジトリのためだけに多くの余分な作業/作業のようです...
cmcculloh 2012

1
この(実際の)回答を更新して、post-receiveをチェックアウトするフックでさらに一歩進むことをお勧めしますGIT_WORK_TREE。詳細については、こちらをご覧ください。私はこれをで非常にうまく機能させることになりましたs3fs。強くお勧めし、私が始めるのを手伝ってくれてありがとう。
bnjmn 2012年

1
@cmculloh EC2インスタンスをまだ持っていない場合は、gitリポジトリを作成するだけで、さらに問題が発生し、長期的にコストがかかる可能性があります。また、S3ストレージはデフォルトではるかに耐久性があります。EC2で同じ耐久性を得るには、とにかくスナップショットをS3までバックアップする必要があります
Jeremy

1
jgitプロジェクトページがegit [ eclipse.org/egit/]プロジェクトのリポジトリにリンクするようにブログ投稿が更新されたようです。そのため、ソリューション1全体が混乱します。少し検索した後、jgit.shをダウンロードして使用できる元のjgitプロジェクトページを見つけることができました。リンクはeclipse.org/jgit/downloadで、将来必要になる可能性があります。
MNイスラム教師範

9

Dandelionは、GitリポジトリをS3 / FTP / SFTPと同期させるもう1つのCLIツールです:http//github.com/scttnlsn/dandelion


誰がこれに反対票を投じたのか分かりません。このソリューションは、ローカルバージョン管理用のgitおよびホスティング用のS3と一緒にインクリメンタルデプロイを行うことが目標である場合に適していると思います。それが問題のようです。
タブレス2014年

8

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

あなたはただ走る必要があります git-s3 deploy

gitリポジトリのすべての利点があり、変更したファイルだけをアップロード/削除します。
注:デプロイはgit pushを介して暗黙的に行われるわけではありませんが、gitフックを介して実現できます。


14
参考Composerまでに、これはに依存し、これはに依存しPHPます。
マールテン

3

Golangで記述され、オープンソースのApacheライセンスで利用可能なmc akaMinioクライアントを使用できます。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

AmazonS3用のmcの設定

$ mc config host add mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
  • アクセス/秘密鍵に置き換えます
  • デフォルトでは、mcはAmazonS3のシグネチャバージョン4を使用します。
  • mys3は、minioクライアントのAmazonS3エイリアスです。

githubローカルリポジトリ/ディレクトリの名前mygithubをAmazonS3バケット名にミラーリングしますmygithubbkp

$ ./mc mirror mygithub mys3/mygithubbkp

それが免責事項に役立つことを願っています:私はMinioで働いています


3

AWS CLIとGit(フック付き)を使用してこれを行うこともできます。Windows10で動作することを確認しました。Linux/ Macで動作するはずです。

コミット時にS3への同期を設定

  1. AWSCLIをインストールします
  2. IAMプログラムアクセス認証情報を設定します(S3に制限することも、バケットのみに制限することもできます)。
  3. 認証情報を使用してAWSCLIを設定します
  4. AWSコンソールまたはCLIでS3バケットを作成します。
  5. バケットがプライベートであることを確認してください。
  6. bare既存のgitプロジェクトの新しいgitリポジトリを作成します。
mkdir myproject.git
cd myproject.git
git init --bare

注:ベアリポジトリを使用するとアップストリームとして機能し、ベアリポジトリには、S3バケットにアップロードする変更のみが含まれ、無視されたファイル、ローカルgit構成などは含まれません。

  1. このフックをベアディレクトリのようpost-updateにインストールします。 hooksmyproject.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バケットを作成する方法を知っていることを前提としています。
b 0119

それで、これにはローカルに2つのリポジトリがあり、ベアローカルリポジトリが更新後にs3に同期するように設定されていることを正しく理解していますか?
ヨシヤ

@Josiahはい、その通りです。必須ではありませんが、ベアリポジトリにはコミットされたファイルのみが含まれるため、S3で必要なファイルのみの同期を簡素化するのに役立ちます。ベアリポジトリなしでこれを試しましたが、S3への同期からいくつかのファイル、特に.gitignoreファイル内のすべてのファイルを除外する必要がありました。
B01

1

単一のgitリポジトリで無料のdeplybot(http://deploybot.com/)サービスを使用できます。

[展開モード]セクションで[自動]を選択すると、展開を自動化できます。

今使っています。とても簡単で便利です。


もはや無料ではありません。
mxcl 2017


-1

そのためにはJGitが必要です

.jgitファイルをaws認証情報を使用してユーザーディレクトリに保存するだけで、s3でgitを使用できます。

gitURLは次のようになります。

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

あなたがあなたがすべてを行うことができますgitjgit

ここで完全なセットアップガイドを入手してください。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.