我们的开发团队一直使用git进行版本控制,并使用git-annex存储大型二进制文件(数据二进制文件,图像,测试二进制文件等)。虽然我们已经能够设置并使用它,但我们遇到了一系列麻烦。
我们经常执行的一项让我们遇到麻烦的常见行动是:
开发人员1为新功能添加了一些测试,并使用git-annex为测试添加了相应的数据。
git add <test-file>
git annex add <data-file>
git annex copy <data-file> --to=<remote location(we use s3 if that is relevant)>
git commit -m 'Tests with data'
git push
git annex sync
工作经过审核和合并(我们使用Github进行托管并遵循分支模型,其中所有工作都由开发人员在他们自己的分支上完成,并通过Pull请求合并到主存储库中)
< / LI>Developer 2从上游获取/合并并尝试在他的机器上运行测试。
git fetch upstream
git merge upstream/<branch>
git annex sync
git annex get
我们经常最终得到的测试数据要么没有在git中跟踪,要么无法从远程位置下载。
在我们的工作流程中使用git-annex的好方法是什么?
另外,还有哪些其他选项可以使这样的工作流更好/更容易管理?
答案 0 :(得分:1)
好的,我们走了:
手动git附件v6使用:
Server1&amp;服务器2:
mkdir testdata
cd testdata
git init
git annex init "LocationNameIdentifyer"
git annex upgrade
git remote add OtherServerLocationNameIdentifyer ssh://otherserver.com/thedir
当此设置准备就绪且目录中没有额外文件时,您现在可以运行
git annex sync --content
如果您需要在两个位置都有文件,请在两个位置
git add --all
在两个位置跟踪当前文件,即所谓的解锁文件
之后
git annex sync --content
运行的两个位置上的可以说3次
所有已合并,您现在可以在两个位置使用cron git annex sync --content并且在工作树中都有相同的文件如果您想跟踪您在某个位置进行的新文件git add git annex add git annex添加将添加文件作为所谓的锁定文件,使其他工作流程完整
答案 1 :(得分:0)
这将使您拥有一个带有相关S3存储桶的git repo“ myrepo”,其中包含您在git存储库中不需要的所有大文件。
设置存储库:
# Clone your repo "myrepo"
git clone git@github.com:me/myrepo.git
cd myrepo
# Initialize it to work with git-annex.
# This creates .git/annex directory in the repo,
# and a `git-annex` metadata branch the tools use behind the scenes.
git annex init
# The first time you use the repo with git-annex someone must link it to S3.
# Be sure to have AWS_* env vars set.
# Select a name that is fitting to be a top-level bucket name.
# This creates the bucket s3://myrepo-annexfiles-SOME_UUID.
git annex initremote myrepo-annexfiles type=S3
# Save the repo updates related to attaching your git annex remote.
# Warning: this does a commit and push to origin of this branch plus git-annex.
# It will ALSO grab other things so make sure you have committed
# or stashed those to keep them out of the commit.
git annex sync
在附件中添加一些文件
# These examples are small for demo.
mkdir mybigfiles
cd mybigfiles
echo 123 > file1
echo 456 > file2
# This is the alternative to `git add`
# It replaces the files with symlinks into .git/annex/.../SOME_SHA256.
# It also does `git add` on the symlinks, but not the targets.
git annex add file*
# Look at the symlinks with wonder.
ls -l mybigfiles/file*
# This puts the content into S3 by SHA256 under the attached to your "special remote":
git annex move file* --to myrepo-annexfiles
# Again, this will do a lot of committing and pushing so be prepared.
git annex sync
使用git-annex
时,git repo将仅具有无效符号链接,这些符号链接包含真实文件内容的SHA256值,该工具将删除大文件。
后来,当其他人克隆存储库并需要文件时:
git clone myrepo
cd myrepo
# Enable access to the S3 annex files.
# NOTE: This will put out a warning about ssh because the origin above is ssh.
# This is ONLY telling you that it can't push the big annex files there.
# In this example we are using git-annex specifically to ensure that.
# It is good that it has configured your origin to NOT participate here.
git annex enableremote myrepo-annexfiles
# Get all of the file content from S3:
git annex get mybigfiles/*
处理完文件后,取回磁盘空间:
git annex drop mybigfiles/*
查看所有内容的真实存放位置以及下载的位置:
git annex whereis mybigfiles/file*
请注意,git-annex是一种超级灵活的工具。我发现,为普通案例提炼出一个简单的配方需要对文档进行一些研究。希望这对其他人有帮助。