我将设置一些工具/技术/环境,这样当我需要为第三方开发人员提供源代码时,我会在没有git历史记录的情况下使用已编译和剥离的敏感代码。因此,我希望自动执行此过程,以便始终提供最新版本的操作,而无需每次都手动执行所有必要步骤。 我用bitbucket和git。
如何使用bitbucket和git实现我的目标?我还需要其他工具吗?
P.S。如果它没有说清楚这个想法,请随意编辑问题。我希望这些问题不是太广泛而且不受限制
答案 0 :(得分:3)
听起来你想写一些post-commit
钩子。但这可能对你来说太精细了。只需将自动步骤写入.git/hooks/post-commit
并制作该可执行文件即可。你可以
git --work-tree PATH_FOR_THIRD_PARTY checkout HEAD -- PUBLIC_FILES
在PATH_FOR_THIRD_PARTY中为第三方开发人员更新PUBLIC_FILES,我假设您为第三方开发人员发布数据。
然后为了更新编译结果,你应该写一些Makefile(或类似的)来从隐藏文件中生成PATH_FOR_THIRD_PARTY中的输出。
如果为存储库选择了正确的布局,只需使用PUBLIC_FILES目录,即可将所有PUBLIC_FILES签出到PATH_FOR_THIRD_PARTY/PUBLIC_FILES
。
请注意,使用此方法,目录布局在发布目录和存储库中将是相同的。
BTW。:如果第三方开发人员更改了其目录中的PUBLIC_FILE,您可以简单地
git --work-tree PATH_FOR_THIRD_PARTY add -u
我经常使用此方法从git存储库发布文件。你可以简单地
git config -g alias.public '!git --work-tree $(git config --get public.root) '
git config public.root 'PATH_FOR_THIRD_PARTY'
所以你可以说
git public diff --name-only
或
git public status -s -uno
我认为这种方法被称为或类似于分离的工作树。
如果您使用此方法,则需要在执行公共提交后签出本地存储库中的文件:
git public add -u; git public commit -m "John Doe changed something"
git checkout HEAD -- .
最后一行更新您的本地工作树,以与您上面提交的提交保持一致。
答案 1 :(得分:0)
我认为你需要的功能是带有交互式选项-i(git rebase -i)的git rebase。从链接中查看详细信息: https://www.atlassian.com/git/tutorials/rewriting-history/git-rebase
这将创建一个新的基础,您可以访问第三方。我不是rebase功能的专家。请查看链接以获取更多详细信息。
答案 2 :(得分:0)
如果您不想被锁定在特定服务中,您可以这样做:
如果您使用此设置,您可以使用我们的服务(https://bitrise.io/ - 我是CTO),因为它内置了Bitbucket webhook支持,即使是免费帐户,但当然您可以选择任何其他CI / CD服务,因为这个设置不需要比Bitbucket钩子支持更多的东西以及运行脚本的能力。