如何在收到未加密的推送

时间:2016-04-06 16:35:23

标签: ruby-on-rails git encryption gitlab gitattributes

我们公司拥有一个基于Rails的软件的SVN存储库。

我们还有一个手动更新的加密存储库 - 拉未加密,使用RubyEncoder进行编码,推送到加密。

我们主要过渡到Git,并且希望自动完成该过程,并且我希望自动完成该过程,并且每次提交。

所以

  1. 服务器接收推送到未加密的任何分支
  2. 服务器过滤器更改了.rb文件,并通过Rubyencoder传递它们
  3. 加密的.rb文件&其他文件被推送到加密存储库,保留提交消息,因此存在1:1的提交比率
  4. 还会镜像分支创建和删除。
  5. 与git-encrypt这样的解决方案不同,它是客户的计算机,我们将其解释为不安全,而不是代码存储库。

    我的第一次尝试是一个很长的接收后钩子,它很慢并且分支没有正常工作,所以我放弃了它。

    我的第二次尝试是设置*.rb = rubyencode并设置cleansmudge过滤器。虽然可以将RubyEncoder设置为在/ dev / stdin上输入并输出到/ dev / stdout,但似乎这些影响磁盘上的文件而不影响git历史记录,每次接收推送需要另一次提交。

    服务器本地的拉动和推动(git remote origin add git@git.work.com:product/work_unencrypted.gitgit remote set-url origin --push git@git.work.com:product/work_encrypted.git以使其从预期的存储库推送和拉出)将由后接收钩子触发,如果清洁/涂抹是按预期工作。

    我已经迷失了,我甚至不知道在这一点上要问的正确问题。也许它是如何跨越&修改提交以保持1:1的历史记录?

1 个答案:

答案 0 :(得分:1)

我会使用一些CI服务器(Jenkins,Travis,Buildbot ......)来运行脚本,而不是使用钩子和涂抹过滤器。你也可以使用post-receive hook,但是只使用它来触发任务(使用一些IPC机制),不要试图在钩子内运行整个任务。

无论如何,让我们假设工作存储库已经初始化并且触发分支已经设置为$ GIT_BRANCH。

还期望这些远程定义:

git remote add unencrypted git@git.work.com:product/work_unencrypted.git
git remote add encrypted git@git.work.com:product/work_encrypted.git

然后脚本本身应该是这样的:

git fetch unencrypted
git checkout -f unencrypted/$GIT_BRANCH

while read -r FILE; do
    rubyencode $FILE
    git add $FILE
done < <( git diff HEAD..HEAD~ --name-only --diff-filter=ACMR \
         | grep .rb\$ )

git commit --amend --no-edit
git push encrypted HEAD:$GIT_BRANCH