使用Git?发布到S3

mbjcgjjk  于 2023-01-11  发布在  Git
关注(0)|答案(9)|浏览(149)

有人知道怎么做吗?到目前为止,我还没有能够找到任何有用的通过谷歌。
我真的很想设置一个本地repo,并使用git push将其发布到S3,其想法是对资产进行本地版本控制,但在S3上进行远程存储。
能否做到这一点,如果可以,如何做到?

ogsagwnx

ogsagwnx1#

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

注意,如果不指定acl:public,那么S3上的git文件将是private(这正是我们想要的)。接下来创建一个S3 bucket来存储仓库,我们称之为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

上面我使用了s3 cmd命令行工具来创建bucket,但你也可以通过Amazon的web界面来创建,现在我们把它推到S3(注意我们在与S3交互时是如何使用jgit的,否则是标准git):

jgit push origin master

现在转到其他位置(例如cd /tmp)并尝试克隆它:

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

当需要更新它时(因为jgit不支持合并或拉取),你可以通过两个步骤来完成:

cd chef-recipes
jgit fetch
git merge origin/master

2使用FUSE-based file system backed by Amazon S3
1.获取Amazon S3帐户!
1.下载、编译和安装。(请参阅安装说明)

  • 通过以下方法之一指定您的安全凭据(访问密钥ID和秘密访问密钥):
  • 使用passwd_file命令行选项
  • 设置AWSACESSSKEYID和AWSSECRETACCESSKEY环境变量
  • 使用主目录中的. passwd-s3 fs文件
  • 使用系统范围的/etc/passwd-s3 fs文件
  • 这样做

/usr/bin/s3fs mybucket /mnt

就是这样!amazon bucket“mybucket”的内容现在应该可以在/mnt中读/写了

7hiiyaii

7hiiyaii2#

Dandelion是另一个CLI工具,可以让Git仓库与S3/FTP/SFTP保持同步:http://github.com/scttnlsn/dandelion

wpcxdonn

wpcxdonn3#

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

您只需运行git-s3 deploy
它具有git repo的所有优点,只上传/删除你修改过的文件。

  • 注意:部署不是通过git push隐式实现的,但可以通过git hook实现。*
8zzbczxx

8zzbczxx4#

你也可以使用AWS CLI和Git(带钩子)来完成这个操作。验证了在Windows 10上的工作。应该在Linux/Mac上工作。

提交时设置同步到S3

1.安装AWS CLI
1.设置IAM编程访问凭据(您可以限制为S3,甚至可以只限制为存储桶)。
1.使用凭据配置AWS CLI
1.在AWS控制台或CLI中创建S3存储桶。
1.确保存储桶是专用的。
1.为现有的git项目创建一个新的bare git repo:

mkdir myproject.git
cd myproject.git
git init --bare

注意:使用裸存储库将作为上游,裸存储库将只包含您想要上传到S3存储桶的更改,而不会忽略文件、本地git配置等。
1.将此挂钩作为post-update安装到空myproject.git目录的hooks中。

#!/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/ --delete

注:增加--delete选项,确保本地删除的文件也从桶中删除,使用--exact-timestamps选项可以优化上传。

  • -exact-timestamps(boolean)当从S3同步到本地时,只有当时间戳完全匹配时,相同大小的项目才会被忽略。默认行为是忽略相同大小的项目,除非本地版本比S3版本更新。
  • -delete(布尔值)同步期间删除存在于目标中但不存在于源中的文件。
    有关更多详细信息和选项,请参见aws sync
    1.使用正确的S3存储桶名称更新挂接。
    1.现在cd到你的myproject目录,并添加空repo作为上游,将其命名为s3,例如:
git remote add s3 path/to/bare/directory/myproject.git

注:可以使用相对路径作为空目录的路径。

测试

1.将更改添加到repo并提交。
1.当您希望将更改同步到S3存储桶时,将更改推送到上游s3
1.您应该看到更改同步到您指定的S3存储桶,您还可以查看S3存储桶中的更改以验证一切正常。

参考文献:

inkz8wg9

inkz8wg95#

你可以使用mc aka Minio client,它是用Golang写的,在开源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。
  • mys 3是迷你客户端的Amazon S3别名
    **将github本地存储库/目录镜像为名称mygithub**到amazon S3存储桶名称mygithubbkp
$ ./mc mirror mygithub mys3/mygithubbkp

希望对您有所帮助免责声明:我为Minio工作

l5tcr1uw

l5tcr1uw6#

你可以使用deplybot(http://deploybot.com/)服务,它对于单个git仓库是免费的。
您可以通过在部署模式部分选择“自动”来自动化部署。
我现在正在用,很简单,很有用。

iklwldmw

iklwldmw7#

也许使用awscli中的s3同步。
如果你想忽略与推送到远程仓库时相同的本地文件,你需要使用--exclude标志。这是AWS内部培训所鼓励的,并且它很有效,但是它包含了你文件夹中的所有内容,包括pycache/任何你想忽略的文件,除非你把它们列为带有exclude标志的可选参数。如果你喜欢这种方法,你可以写一个扩展名为.sh的脚本,并且有一系列的--exclude标志,这些标志包含你想忽略的所有文件/目录。

aws s3 sync ./* s3://fraschp/mizzle/ 
--exclude ".git/*" 
--exclude "./pycache/*"
--exclude "*.csv"

有关语法或基本原理的更多信息,特别是有关include/exclude的信息,请参阅文档。
我喜欢这种普通的方法,因为我不需要安装任何东西,而且它符合s3工具中的任何安全考虑。

jhkqcmku

jhkqcmku8#

这个脚本(及其相关的GitHub / AWS配置)会将新提交的文件同步到你的存储库,并同步到你的S3存储桶。
https://github.com/nytlabs/github-s3-deploy

tyu7yeag

tyu7yeag9#

您需要使用JGit

只需在User目录下保存一个.jgit文件,并使用aws凭据,就可以在s3中使用git。
下面是你的git url的样子。

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

你可以用jgit做任何你用git做的事情。
在此获取完整的安装指南。
https://metamug.com/article/jgit-host-git-repository-on-s3.html

相关问题