git提交要开发和掌握的不同文件集

git提交要开发和掌握的不同文件集,git,version-control,dvcs,release-management,git-flow,Git,Version Control,Dvcs,Release Management,Git Flow,我最近开始开发一个新的库,并使用Git进行版本控制。我决定跟随这篇非常受欢迎的博客文章来管理分支。现在是我发布第一个版本的时候了,我想要一些关于管理特定文件集的建议,如下所述 在开发分支和功能分支上,我需要所有“支持文件”,例如用于编译的makefile和doxygen用于生成文档的readme.md文件。(注意,这些只是几个例子。我有更多的“支持文件”。) 这篇博文还说,提交到主分支的定义是发布。我希望该版本包含所有“二进制文件”(例如,包括编译产生的对象文件和包含文档的html文件)。这些文

我最近开始开发一个新的库,并使用Git进行版本控制。我决定跟随这篇非常受欢迎的博客文章来管理分支。现在是我发布第一个版本的时候了,我想要一些关于管理特定文件集的建议,如下所述

在开发分支和功能分支上,我需要所有“支持文件”,例如用于编译的makefile和doxygen用于生成文档的readme.md文件。(注意,这些只是几个例子。我有更多的“支持文件”。)

这篇博文还说,提交到主分支的定义是发布。我希望该版本包含所有“二进制文件”(例如,包括编译产生的对象文件和包含文档的html文件)。这些文件应该提交给主分支,这样客户就可以使用标记从存储库中克隆并获得所需的版本

我不希望在发行版中有“支持文件”(因为我不想给客户一大堆他们不想要或不能使用的文件)。类似地,我不希望在development和feature分支中对“二进制文件”进行版本控制。因此,我希望提交一组要开发的文件,以及另一组要掌握的文件。(当然,还有一组文件对这两个分支来说都是“通用的”)但是,我对保持主分支和开发分支不同步持怀疑态度

我提议的模型听起来好吗?如果是这样,我应该如何处理不同文件的开发和掌握?有没有更好的方法来处理这种情况


我浏览了上述博客页面上的每一条评论,搜索了互联网,也在StackOverflow上搜索了这里。从搜索结果来看,这篇文章似乎是唯一一篇接近我问题的文章。这两个都没有帮我找到解决办法

IMO建议的解决方案不好。您的问题的常见解决方案是:

  • 版本控制所有“支持文件”。如果您关心这些文件是被修改还是被删除,那么它们应该处于版本控制之下
  • 如果“二进制文件”只是由编译过程生成的,则不要对其进行版本控制。编译的代码和makefile才是关键。如果二进制文件用于编译代码,则可能在“bin”文件夹中有二进制文件
  • 围绕要交付给客户机的包创建构建过程。您可以为他们可以访问的客户端构建一个包,也可以让他们自己运行“包脚本”。“包脚本”只需在命令行上执行即可克隆repo、构建包和删除repo

要了解更多关于git分支模型及其如何应用于开发的信息,请使用git flow签出主分支掌握最新版本的提示,该语句中的缺陷是当您使用需要编译的软件时

在这种情况下,主分支是从中创建实际版本的源版本分支。如果您按照这个定义查看分支模型,那么您也需要主分支中的所有支持文件。这样,您就可以始终创建最新版本的二进制文件

在你的例子中,你说你不想让客户拥有一堆他们不需要的文件,这意味着你在发布后需要做一些额外的工作。在git flow术语中,在完成git flow发布之后,您需要执行一个额外的步骤来编译您的发布。汇编结果不应受到修订控制。使用最初的git flow软件,您需要手动启动编译过程,如果您使用my fork,您实际上可以通过使用挂钩自动完成这项工作


我愿意说,github上99%需要某种编译的项目的所有支持文件也都在主分支中。

感谢您的回复。让我澄清一点。“支持文件”受版本控制。我只希望他们不要被交给主分支。您是否建议“包脚本”在客户端选择性地签出主机上的特定文件(即跳过所有“支持文件”)?这可能是可行的,只是想澄清一下你的意思。很接近。我不知道用git有选择地签出特定文件的方法。但是这个想法是正确的,您可以在客户端过滤不需要的文件。我的web开发世界中的一个例子是创建一个Capistrano脚本,在本地编译SCS和coffee脚本文件,然后scp将它们发送到服务器。通过这种方式,您将回购协议与客户需求分离,并将回购协议用于发展需求。我希望这能为你指明正确的方向。