如何自动化部署源代码和编译后的代码(不包括git历史记录)给第三方开发者?

4
我将设置一些工具/技术/环境,以便在我需要向第三方开发人员提供源代码时,可以不包含git历史记录和已编译和剥离的某些敏感代码。因此,我希望自动化这个过程,以便每次都能提供最新版本,而无需手动执行所有必要步骤。
我使用的是Bitbucket和Git。如何使用Bitbucket和Git实现我的目标?我需要其他工具吗?
P.S. 如果问题表述不清楚,请随意编辑。我希望这个问题不会太宽泛,并且不会受到限制。

是的,有一个专门针对建议的关闭理由。我建议您[编辑],询问如何使用Bitbucket和Git实现您的目标。 - user1228
在谷歌上搜索“持续集成”。从Atlassian Stash开始,它与Bitbucket兼容。 - Nick Volynkin
3个回答

3
听起来你想编写一些“提交后钩子(post-commit hook)”程序,但那可能对你来说太细致了。只需编写自动步骤到.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

请注意,使用此方法,发布目录和存储库中的目录布局将相同。

顺便说一句:如果第三方开发人员更改其目录中的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 -- .

最后一行命令将会更新本地工作目录,使其与上述提交保持一致。

听起来对我的小需求来说是个好主意。使用CI工具的整个故事,我还不确定是否需要它以及是否需要付费。但这是一件有趣的事情。我已经在使用pre-commit hook了。但我没有考虑过它在这个上下文中的作用。 - rightaway717
其实我认为CI工具除了在一个很酷的用户界面中隐藏相似的步骤之外,没有做更多的事情。我从未需要它们,因为我完全满意于仅使用git。顺便说一下,数千名Linux内核开发人员现在已经使用git独立工作了几年,以持续集成他们的工作到被称为Linux内核的怪物中。 - ikrabbe

0
我认为你需要的功能是带交互选项-i的git rebase(git rebase -i)。请从以下链接中查看详细信息: https://www.atlassian.com/git/tutorials/rewriting-history/git-rebase 这将创建一个新的基础,您可以将其授权给第三方。我不是rebase功能的专家,请查看链接以获取更多详细信息。

谢谢你的回答。我知道git是如何工作的,也知道.git文件夹的作用。但我想要自动化它。我有一个专门用于敏感数据的项目。我在问题中一定提到了这一点。 - rightaway717

0

如果您不想被限制于特定的服务,可以这样做:

  • 编写一个脚本来执行您所需的操作,提供源代码、编译二进制文件和其他资源(如果有的话)的归档
  • 您应该能够在自己的机器上执行此脚本,以进行方便的测试/更改
  • 然后编写另一个脚本,按您要求创建这些内容的软件包(例如创建ZIP文件),并将其分发到FTP服务器、Amazon S3或任何其他您喜欢的服务
  • 现在您应该拥有自动化此过程所需的所有内容。您应该能够在自己的机器上执行此操作
  • 如果您想要自动化整个过程,使之在代码更改时自动执行,那么使用此设置,您几乎可以选择任何连续集成/交付服务来为您运行它,由Bitbucket webhook触发。

如果您采用此设置,您可以使用我们的服务(https://bitrise.io/ - 我是CTO),因为它内置了Bitbucket webhook支持,即使是免费帐户,但当然您可以选择任何其他CI/CD服务,因为此设置不需要比Bitbucket hook支持和运行您的脚本更多的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接