git-annex 的良好工作流程是什么?

san*_*ora 6 git workflow git-annex

我们的开发团队一直在使用 git 进行版本控制,并使用 git-annex 来存储大型二进制文件(数据二进制文件、图像、测试二进制文件等)。虽然我们已经能够设置并使用它,但我们也遇到了一些麻烦。

我们经常执行的一个给我们带来麻烦的常见行为是:

  1. 开发人员 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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 工作被审查和合并(我们使用 Github 进行托管并遵循分叉模型,其中所有工作由开发人员在他们自己的分叉上完成并通过拉取请求合并到主存储库中)

  3. 开发人员 2 与上游提取/合并并尝试在他的机器上运行测试。

    git fetch upstream
    git merge upstream/<branch>
    git annex sync
    git annex get
    
    Run Code Online (Sandbox Code Playgroud)

我们经常会发现测试数据要么无法在 git 中跟踪,要么无法从远程位置下载。

在我们的工作流程中使用 git-annex 的好方法是什么?

顺便说一句,还有哪些其他选项可以使这种工作流程更好/更易于管理?

fra*_*eed 2

好的,我们开始吧:

手动git附件v6使用:

服务器1和服务器2:

mkdir testdata
cd testdata
git init
git annex init "LocationNameIdentifyer"
git annex upgrade
git remote add OtherServerLocationNameIdentifyer ssh://otherserver.com/thedir
Run Code Online (Sandbox Code Playgroud)

当此设置准备就绪并且目录中没有额外文件时,您现在可以运行

git annex sync --content
Run Code Online (Sandbox Code Playgroud)

在两个位置上如果您需要在两个位置都有文件

git add --all 
Run Code Online (Sandbox Code Playgroud)

在这两个位置跟踪当前文件作为所谓的解锁文件

git annex sync --content 
Run Code Online (Sandbox Code Playgroud)

假设在两个地点都运行了 3 次

所有内容都已合并,您现在可以在两个位置 cron gitannexsync --content 并且在工作树中都有相同的文件,如果您想跟踪放置在您执行 git add 的位置的新文件,而不是 gitannexadd gitannexadd 将添加这些文件作为所谓的锁定文件,构成了一个完全不同的工作流程