Git kullanarak S3'e yayınlamak ister misiniz?


89

Bunun nasıl yapılacağını bilen var mı? Şimdiye kadar Google aracılığıyla yararlı bir şey bulamadım.

Yerel bir depo kurmayı ve git pushonu S3'te yayınlamak için kullanmayı gerçekten çok isterim , fikir varlıklar üzerinde yerel sürüm kontrolüne sahip olmak, ancak S3'te uzak depolamaya sahip olmaktır.

Bu yapılabilir mi ve eğer öyleyse, nasıl?


1
OP, Şu anda kabul edilen cevap sorulan soru için geçerli değildir. Daha iyisi için güncelleme yapmak mümkün olabilir mi? s3fsUygulanabilir bir çözüm olduğuna inanıyorum .
bnjmn

1
@Benjamin Dikkatimi buna geri çağırdığınız için teşekkürler, güncellendi.
Andrew

Herhangi bir uzak depoya konuşlandırmak (kaydetmelerin yedekleme geçmişini korumak için) ve bir S3 klasörüyle basitçe senkronize etmek için bir git kancası kullanmak mantıklı olmaz mıydı (örneğin:) s3cmd sync …?
Fabien Snauwaert

Yanıtlar:


50

1 http://blog.spearce.org/2008/07/using-jgit-to-publish-on-amazon-s3.html aracılığıyla JGit'i kullanın

Jgit.sh dosyasını indirin, jgit olarak yeniden adlandırın ve yolunuza koyun (örneğin $ HOME / bin).

.Jgit yapılandırma dosyasını kurun ve aşağıdakileri ekleyin (AWS anahtarlarınızı değiştirerek):

$ vim ~ / .jgit

accesskey: aws access key
secretkey: aws secret access key

.Jgit dosyasında acl: public belirtilmezse, S3'teki git dosyalarının özel olacağını unutmayın (istediğimiz de buydu). Ardından, deponuzu depolamak için bir S3 demeti oluşturun, buna git-repos diyelim ve ardından yüklemek için bir git deposu oluşturalım:

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

Yukarıda, kova oluşturmak için s3cmd komut satırı aracını kullanıyorum, ancak bunu Amazon web arayüzü aracılığıyla da yapabilirsiniz. Şimdi bunu S3'e itelim (S3 ile her etkileşimde jgit'i nasıl kullandığımıza ve aksi takdirde standart git'e dikkat edin):

jgit push origin master

Şimdi başka bir yere gidin (örneğin cd / tmp) ve klonlamayı deneyin:

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

Güncelleme zamanı geldiğinde (çünkü jgit birleştirme veya çekmeyi desteklemediği için) 2 adımda yaparsınız:

cd chef-recipes
jgit fetch
git merge origin/master

2 Amazon S3 tarafından desteklenen FUSE tabanlı dosya sistemini kullanın

  1. Bir Amazon S3 hesabı edinin!

  2. İndirin, derleyin ve kurun. (Kurulum Notlarına bakın)

  3. Güvenlik Kimlik Bilgilerinizi (Erişim Anahtarı Kimliği ve Gizli Erişim Anahtarı) aşağıdaki yöntemlerden birini kullanarak belirtin:

    • passwd_file komut satırı seçeneğini kullanarak

    • AWSACCESSKEYID ve AWSSECRETACCESSKEY ortam değişkenlerini ayarlama

    • ana dizininizde bir .passwd-s3fs dosyası kullanarak

    • sistem çapında / etc / passwd-s3fs dosyasını kullanarak

    • Bunu yap

.

/usr/bin/s3fs mybucket /mnt

Bu kadar! amazon paketinizin "mybucket" içeriği artık erişilebilir olmalıdır / mnt'de oku / yaz


1
Bu talimatları takip ettim ama The request signature we calculated does not match the signature you provided. Check your key and signing methoddenediğimde bir hata alıyorum jgit push origin master. Bunu nasıl ortadan kaldırabileceğim konusunda bir fikrin var mı?
john

4
Neden sadece git kullanmıyorsun? Bu, sadece
aws'de

1
Ben ile bir adım ileri gitmek için bu (gerçek) cevabını güncellenmesi öneririm post-receivekancanın kontroller GIT_WORK_TREE. Daha fazla ayrıntı için buraya bakın. Bununla oldukça iyi çalışmasını sağladım s3fs. Şiddetle tavsiye edilir ve başlamama yardım ettiğiniz için teşekkürler.
bnjmn

1
@cmculloh, halihazırda bir EC2 örneğiniz yoksa, bu daha fazla sorun olabilir ve yalnızca bir git deposu sahibi olmak uzun vadede maliyetli olabilir. Ayrıca S3 depolaması varsayılan olarak çok daha dayanıklıdır; EC2'de aynı dayanıklılığı elde etmek için yine de S3'e kadar anlık görüntüleri yedeklemeniz gerekir
Jeremy

1
Görünüşe göre blog yazısı, jgit proje sayfasını egit [ eclipse.org/egit/] projesinin deposuna bağlanacak şekilde güncellenmiş ve bu da tüm çözümü 1 kafa karıştırıcı hale getiriyor. Biraz araştırdıktan sonra, jgit.sh'nin indirilip kullanılabileceği orijinal jgit proje sayfasını bulabildim. Bağlantı, gelecekte ihtiyaç duyabilecek herkes için eclipse.org/jgit/download şeklindedir .
MN Islam Shihan

9

Dandelion, Git depolarını S3 / FTP / SFTP ile senkronize edecek başka bir CLI aracıdır: http://github.com/scttnlsn/dandelion


Bunu kimin reddettiği hakkında hiçbir fikrim yok. Hedef, yerel sürüm yönetimi için git ve barındırma için S3 ile birlikte artan dağıtımlara sahip olmaksa bu çözümün iyi olduğunu düşünüyorum. Soru bu gibi görünüyor.
Tabrez

8

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

Sadece koşmalısın git-s3 deploy

Bir git deposunun tüm avantajlarıyla birlikte gelir ve yalnızca değiştirdiğiniz dosyaları yükler / siler.
Not: Dağıtımlar git push yoluyla örtük değildir, ancak bunu bir git kancası ile gerçekleştirebilirsiniz.


14
Bilginize, buna bağlıdır Composersırayla bağlıdır, hangi PHP.
Maarten

3

Golang'da yazılmış ve Açık Kaynak Apache Lisansı altında bulunan mc aka Minio istemcisini kullanabilirsiniz . Mac, Linux, Windows, FreeBsd için mevcuttur. İhtiyacınıza mc mirrorulaşmak için komutu kullanabilirsiniz .

mc GNU / Linux İndir

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 için mc'yi yapılandırma

$ mc config host add mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
  • Erişim / gizli anahtarınızla değiştirin
  • Varsayılan olarak mc, amazon S3'ün 4. imza sürümünü kullanır.
  • mys3, minio istemcisi için Amazon S3 takma adıdır

Github yerel deponuzu / dizininizi yansıtın, adımygithub amazon S3 paket adına söyleyinmygithubbkp

$ ./mc mirror mygithub mys3/mygithubbkp

Feragatnameye yardımcı olacağını umuyoruz: Minio için çalışıyorum


3

Bunu AWS CLI ve Git'i (kancalarla) kullanarak da yapabilirsiniz. Windows 10'da doğrulanmış çalışma Linux / Mac'te çalışmalıdır.

Kaydetme sırasında S3 ile Sync'i kurun

  1. AWS CLI'yi yükleyin
  2. IAM programlı erişim kimlik bilgilerini ayarlayın (S3 ile sınırlandırabilir ve hatta yalnızca paketle sınırlandırabilirsiniz).
  3. Kimlik bilgileriyle AWS CLI'yi yapılandırın
  4. AWS konsolunda veya CLI'de S3 paketini oluşturun.
  5. Paketin özel olduğundan emin olun.
  6. bareMevcut git projenizin yeni bir git deposunu oluşturun:
mkdir myproject.git
cd myproject.git
git init --bare

NOT: Çıplak depo kullanmak yukarı akış görevi görür ve çıplak depo yalnızca S3 klasörüne yüklemek istediğiniz değişikliklere sahip olur ve yok sayılan dosyalar, yerel git yapılandırmaları vb.

  1. Bu kancayı çıplak dizinin post-updateiçine hooksyerleştirin 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. Kancayı doğru S3 kova adıyla güncelleyin.
  3. Şimdi myprojectdizininize cd yapın ve çıplak depoyu yukarı akış olarak ekleyin, s3örneğin adlandırın:
git remote add s3 path/to/bare/directory/myproject.git 

NOT: Çıplak dizine giden yol için göreli bir yol kullanabilirsiniz.

Test yapmak

  1. Deponuza değişiklikleri ekleyin ve kesin.
  2. Değişiklikleri s3S3 klasörünüzle senkronize etmek istediğinizde yukarı akışa aktarın.
  3. Değişikliklerin belirttiğiniz S3 klasörüyle senkronize edildiğini görmelisiniz, her şeyin çalıştığını doğrulamak için S3 klasöründeki değişiklikleri de görüntüleyebilirsiniz.

Referanslar:


Zaten AWS CLI ve Git yüklediyseniz sorun değil. Git'in kancalar hakkında bilgi sahibi olduğunu, IAM kullanıcılarını ve programatik kimlik bilgilerini nasıl kuracağınızı ve S3 kovaları oluşturacağınızı bildiğinizi varsayar.
b01

Öyleyse, bunun yerel olarak iki deposu olduğunu ve çıplak yerel deponun, güncelleme sonrası aracılığıyla kendisini s3 ile senkronize edecek şekilde ayarlandığını doğru bir şekilde anlıyor muyum?
Josiah

@Josiah Evet bu doğru. Gerekli olmasa da, yalnızca S3'te istediğiniz dosyaların eşitlenmesini basitleştirmeye yardımcı olur, çünkü çıplak depo yalnızca kaydedilmiş dosyaları içerecektir. Bunu çıplak depo olmadan denedim, ancak daha sonra bazı dosyaları S3 ile senkronizasyonun dışında bırakmak zorunda kaldım, özellikle .gitignore dosyasındaki her şeyi.
b01

1

Tek bir git deposu için ücretsiz olan deplybot ( http://deploybot.com/ ) hizmetini kullanabilirsiniz .

Dağıtım modu bölümünde "otomatik" seçeneğini belirleyerek dağıtımı otomatikleştirebilirsiniz.

Şimdi kullanıyorum. Çok kolay ve kullanışlıdır.


Artık özgür değil.
mxcl


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.