Questions tagged «git»

Git是开源DVCS(分布式版本控制系统)

2
一个产品的不错的git分支模型,该模型应该与另一个第三方产品的版本(以及一个建议的优缺点)一起提供
注意: 我的问题集中在我的特定问题(涉及Liferay)上,但是我希望它对需要在git上维护同一项目的各种版本的人有用。 我在一家为Liferay Portal编写很多插件的公司工作。这些插件(portlet,主题等)通常是可重用的,当然,应该为门户的新版本进行更新。 但是,通常必须将Portlet迁移到Liferay的新版本并维护其先前版本。同样,我们经常必须为某些客户端创建非常特定的自定义,将其添加到“主版本”中没有意义。 这些要求使我们的工作复杂化,但是幸运的是,我们可以进行一些简化。例如,一次只能由一位程序员频繁更新插件。同时在插件中添加两个或多个功能的情况很少见。 现在,我们正在迁移到Gitorious。我们正在尝试为这种情况设想一个分支模型。 我的模特 我建议的是: 每个插件在项目内部的Gitorious中都有自己的存储库。例如,用于显示小猫的portlet将kittens-portlet在liferay-portlets项目内部具有一个存储库。 创建新插件时,请在根据Liferay版本命名的分支(例如lf5.2)上创建它。 每次对插件进行更新时,都会批准该更新并将其部署到生产环境中,并用一个版本(例如lf5.2v1,lf5.2v2等)标记该插件* 每次将插件移植到Liferay的新版本时,我们都会分支最新版本(例如,创建branch lf6.0)。 一旦投入生产,新分支的负责人将收到诸如的标签lf6.0v1。 每次我们必须以客户端特定的方式自定义插件时,都会使用客户端名称创建一个分支(例如,我们将为lf5.2clientcorp客户端“ ClientCorp Inc.” 创建一个分支)。 这是一个不寻常的模型:它没有master分支并且没有很多分支。这就是我假设具有这种模型的存储库的样子: 一位朋友发现此系统相当复杂且容易出错。他提出了出色且受欢迎的Vincent Driessen模型,我发现该模型仍然难以管理和严格遵守纪律。当然,它很棒(并经过测试!),但对于我们的情况似乎太复杂了。 我朋友的模特 然后,他提出了另一种模型:我们将为Liferay版本中的每个插件提供一个存储库(因此,我们将开始创建kittens-lf5.2-portlet,然后再创建kittens-lf6.0-portlet),每个插件都有一个master分支和一个develop分支。该master会随时进行部署。(或者,master和Steve Loshstable所建议的相反)。 这很简单,但是我不喜欢这个系统: 它可能会在一个项目中导致大量的存储库,从而使Gitorious难以浏览。 项目目录的名称是相关的。如果有人将存储库克隆到kittens-lf6.0-portlet目录并使用ant生成WAR(通常),则WAR名称也将是kittens-lf6.0-portlet。kittens-portlet在升级的门户网站中,此portlet的旧版本(例如命名)将被视为不同的portlet(并且可能会丢失)。稍加注意可以避免它,但我宁愿避免它。 同一插件的不同版本将分开维护。我伤了我的心:( kittens-lf6.0-portlet 我认为,这是存储库的丑陋名称。 我怀疑最后两个要点-也是两个更主观的要点-是我不愿意的主要原因。尽管如此,所有四个反对意见仍然成立。 太太,我自己的建议对我自己来说似乎很奇怪,我想知道上面是否有隐藏的错误。OT3rdH git非常强大和灵活,我认为探索它的可能性不应该感到羞耻。 所以,我问: 最好的模型是什么?我的建议?我朋友的模特?现在是传统的Vincent Driessen系统? 您还建议其他什么分支模型? 如果您认为我的模型不好,为什么会这样呢?我很想了解缺点和盲点。 *实际上,我更喜欢用这样的版本标记提交,例如,v1但显然git中的标记不在分支范围内-也就是说,我不能在其中添加1 v1标记,lf5.2而在其中另一个标记lf6.0-因此我必须命名科。它是正确的BTW吗?

2
如何在GitHub上控制项目的版本
如今,我试图在GitHub上花费尽可能多的时间(即使我是团队中唯一的团队成员),以真正感受到现实世界中企业应用程序的情况。 我要解决的一个问题是控制版本。假设我们开始了一个项目。然后,团队成员创建了一些分支并在那里发展。准备好进行生产时,我们将所有分支与master分支合并。最后,我们开始使用version 1.0。 现在该版本1.0已发布,并且该软件的该版本存在一些问题。我们希望开始开发版本1.1,以解决由于匆忙执行项目而引入的问题。 现在,问题是这样的: 我们应该如何在这里控制版本控制? 我们是否应该为此创建一个新分支,v1.0并在其中保留1.0软件的版本,并在某些分支上(或不进行)开发,与之合并master,一起使用version 1.1? 是否有针对此类情况的约定?

6
只要任何推送工作中的最终提交都可以,那么中断中间的提交就可以了吗?
相关: 每个git commit都应该使项目处于工作状态吗? 假设我在本地进行了以下提交: 修改数据库架构,破坏应用程序。 更新应用程序,使其再次与数据库架构兼容。 只要我同时推送两个提交,master便会保持工作状态。但是,历史版本已损坏。 我知道我可以git rebase -i用来将提交压缩在一起。但是,生成的提交将很大且描述性较低。如果我需要搜索提交历史记录以找出更改原因的原因,我宁愿找到显示我所做的事情和原因的原始提交。 我的问题是: 有没有人遇到困难,由于打破历史的主人提交? 如果是这样,是否有一种简单的方法可以避免这些困难,而又不丢弃各个提交消息和更改?
13 git  dvcs 

4
将多GB SVN存储库移至Git
当前,我的公司在SVN存储库中具有Visual Studio隔离,其组织如下: SolutionFolder (~3.5 GB) |-> SolutionName.sln |-> .. Some source code folders... (~250 MB) |-> ThirdParty (~3 GB) |-> Tools | -> Tool1 | -> Tool2 Tool1和Tool2是独立构建的(具有自己的解决方案),但是会生成在主要构建中使用的可执行文件。ThirdParty文件夹包含项目的所有依赖项,包括一些预编译的100+ MB .lib文件和大型库(如boost)。 将所有功能都包含在一个SVN存储库中非常方便,这样(1)开发人员只需执行一次签出操作,(2)我们就无需跟踪每个版本的构建所需的依赖项版本。另一方面,要花些时间检查此仓库。 将这个项目结构转移到git的最佳方法是什么?大概最好是从主存储库中排除ThirdParty以及可能的工具,但是我们希望一步就可以轻松下载ThirdParty,并且我们希望对其进行版本控制(并且主存储库和ThirdParty / Tools之间的版本不匹配会很糟糕)。 在这一点上,我对保存历史不感兴趣,只是对如何组织这样的项目不感兴趣。

2
撤消将文件从回购中删除的Git合并的最佳方法是什么?
因此,假设发生以下情况(并且我们都在使用SourceTree): 我们都在努力起源/发展。 我去度假一个星期。 我的同事在过去的几天里一直在本地工作,而没有将起源/开发重新合并到他的本地开发分支中。 他尝试进行推动,并被告知必须先合并,然后再进行牵引。 他遇到了冲突,阻止了自动合并后继续进行。 假设Git类似于SVN,我的同事将“新”文件丢弃在他的工作副本中,然后提交合并-从起源/开发部门清除这些“新”文件。 在该修订版的基础上,还需要进行为期数周的开发工作。 我从假期回来,发现我缺了几天的工作。 我们对Git都是非常陌生的(这是我们使用它的第一个项目),但是我所做的修复工作是: 将“ develop”重命名为“ develop_old”。 将develop_old合并到新的分支“ develop_new”。 将dev_new分支重置为错误合并之前的最后一次提交。 从那时起,Cherry逐一挑选每个提交,以手工解决冲突。 将develop_old和develop_new推到起点。 在这一点上,我希望develop_new是我们所有更改的“好”副本,并重新应用了随后的数周工作。我也假设说,“反向承诺”会做一个合并奇怪的事情,尤其是接下来的几个星期的工作价值是基于它-因为该合并包含了很多的事情,我们也有东西,我们不要想一起t。 我希望这种情况再也不会发生,但是如果再次发生,我想知道一种更轻松/更好的解决方法。当基于该合并的回购中进行了大量工作时,是否有更好的方法来撤消“不良”合并?
13 git 

2
工作流程,编辑当前任务中没有的内容
通常,当我编程时,我要完成一个明确的任务,但是会发现我想继续进行的烦人的事情要清理。 在这里,我看到三个选项: 以后再做(可能会忘记/不得不花费时间添加票证) 现在就做,并将其与我当前的工作一起提交(不清楚) 现在执行并分别提交(必须找到它,可能会犯一个错误,无意中选择了选项2) 这可能是相当基本的,但是有什么方法可以使用svn / git / other来规避呢?

1
Git从功能分支分支到子功能
我们目前处于以下情况,其中功能分支已分支为子功能分支(例如,为同一功能处理后端和前端事物): o | o development |\ | o feature-a | | | o | |\ | | o feature-a-sub | | | | | | | \ | o merged feature-a into feature-a-sub | / o feature-a-sub merged into development | | | o feature-a with future work on it …
12 git  branching 

1
Web开发的GIT工作流程
很久以前,我与之合作的Web开发人员小团队开始使用git进行Web开发。那时我们只是致力于直接登台或掌握,然后在两者之间频繁合并。总比没有好,但也很混乱。 不久之前,我们采用了gitflow工作流程。尽管它肯定比以前出现的混乱更好,但它似乎有些繁琐且过于释放/面向里程碑。我的开发人员经常要求我弄清楚它应该如何工作,什么应该合并而不应该合并。一般而言,它似乎不适合用于Web开发工作,在Web开发工作中,我们经常部署代码,而没有跟踪特定的发布里程碑。 根据朋友最近的建议,我已经开始关注GitHub Flow。在这里阅读Scott Chacon的帖子,可以很好地解决这一难题: 那么,为什么不在GitHub上使用git-flow?好吧,主要的问题是我们一直都在部署。git-flow过程主要围绕“发行版”设计。我们实际上没有“版本”,因为我们每天都会部署到生产中,通常一天要部署几次。 FWIW,我也在Atlassian的网站上看到了这种很好的工作流汇总:https ://www.atlassian.com/git/workflows#!workflow-feature-branch 但是,它们看起来都像是在一个小型团队中,对于Web开发而言是错误的选择,并且它们又针对主要的应用程序发布而不是频繁/每日发布。 这是关于SE的一个问题,要求比较git-flow和github-flow /programming/18188492/what-are-the-pros-and-cons-of-git-flow-vs-github -流 一般而言,这是一个很好的答案,但是正如我在meta.programmers.SE下方的评论中提到的那样,这似乎表明有关最佳通用工作流程实践的问题属于此处,我希望除了git-flow和github以外,还提供更多可能的答案-flow,而特定于Web开发。因此,我认为这里值得提出一个新问题。 这样一来,对于一个小型Web开发团队来说,您发现最佳/首选的基于git的工作流程是什么?是github-flow还是其他东西?

2
在GitLab的同一服务器上运行CI?
我在公司中设置了一个GitLab服务器,现在向它添加了GitLab CI。 在开始此任务之前,我想了解在GitLab和GitLab CI使用的同一服务器上运行运行程序是否有任何不利之处。 我读过有安全性问题,但我们仅在内部使用它,因此我认为这可能不是问题。 我想念什么吗?

5
要将git版本集成为内部版本号?
我和一个同事轮流讨论/讨论在构建时将从当前git存储库派生的版本集成到我们的代码中的问题/优点。 我们认为优点包括: 无需担心人为错误更新版本号 我们在设备中找到的内容与源于它的源代码之间的可追溯性 (对我们而言)出现的问题包括: IDE派生的构建系统(例如MPLABX)可能很难弄清楚将这些挂钩放置在何处(最终可能会很俗气) 实际将其集成到构建脚本/ makefile中的更多工作 耦合到特定的构建方法(例如,如果一个人使用XCode和另一个MPLABX进行构建怎么办)可能会给下游带来意外 因此,我们很好奇其他人在这场辩论中的地位。讨论变得容易流传开来。那里有很多人坚持端到端的自动化,把大量的前期工作挂在了一起,并耦合了它带来的影响。辩论的另一端还有很多其他人,他们所做的最简单的事情就是行之有效,并且承受风险。 对于哪一方最好着陆有合理的答案吗?
12 c  git  builds  build-system 

1
合并分支的有用git commit消息
作为此问题的后续措施: 如果我自己一个团队工作,那么在合并分支时,可以通过将所有提交压缩到单个差异中然后合并该差异来维护有用的提交消息。这样,我可以轻松地看到分支中引入了哪些更改,并且我只有一个摘要来描述浏览主分支时该分支中完成的功能/更改/所做的一切。 我现在的问题是,与团队合作时该如何完成?在这种情况下,分支将被推送到远程存储库,这意味着我无法将分支中的所有提交压缩为单个commit。如果分支是公共分支,则master分支中仍可以有一个有用的合并提交吗?(“有用”是指主行中的提交告诉我(1)分支中所做的操作的有用摘要,以及(2)分支的差异。)
12 git  branching 

1
小型项目的Git工作流程/实践(PNG流程图)
我正在尝试提出一个个人工作流程。我整理了一个发行版的假设生命周期的流程图:一个开发人员推向公开的github repo +一个帮助提供某些功能并修复bug的朋友。 这是版本控制的合理方法吗? 主要思想是保持公共仓库整洁: 每个新版本都会进入自己的分支,直到完成后最终在master分支中对其进行标记。 为了防止异常,所有工作都在“功能”或“修补程序”分支上进行,而不是在实际的发行分支上进行。 合并到更高级别的分支总是要重新设置基础或进行压缩(以避免混乱)。 如果这太过猛烈,我不介意,因为对我而言,重点就在于学习大型项目可能需要的技能。唯一的问题是,如果我在做完全错误或不必要的事情。 编辑2:修正原始流程图中的错误主意,并使它更易于浏览。

2
git,maven和jenkins-版本,开发和发布构建工作流程
使用git,maven和jenkins进行以下操作的首选方式是: 我正在开发一个应用程序,我想维护它的“ dev”和“ release”分支。我希望詹金斯同时建立两者。发行工件可能具有1.5.2之类的版本,而dev-builds仅为0.0.1-SNAPSHOT。我不想有2个不同的pom.xml文件。 我查看了配置文件,但是它们似乎无法更改工件版本。我研究的一种方法可能是在测试版本中添加“限定符”。当然,我可以重命名该文件,因为关于此的真实工件信息并不重要,因为该应用程序是独立的。 这样做的首选方式是什么?还是您会怎么做?

2
使用Git管理Web应用程序的多个版本
我们拥有一系列应用程序,所有应用程序都具有相同的基础。到目前为止,我一直在开发此基础,Git工作流程非常简单: 开发在develop分公司完成 name-of-the-feature分公司开发了新功能 发布在release-**分支中 到目前为止,该系列的每个应用程序的代码都是相同的。假设他们共享的基础已经完成,从现在开始,每个应用程序的代码都会有所不同。 我不确定应该如何处理git以及具有相同基础的多个应用程序。 他们每个人都应该有自己的git项目吗? 他们应该在同一个项目中,但每个人都在自己的分支中吗? 关键是:如果我将它们放在单独的项目中,则在应用程序的基础上进行的每个修改都必须在每个应用程序中重复进行。我对git不太熟悉,但是如果我将每个项目存储在一个分支中,是否可以将基础修改与每个应用程序合并? 有没有人遇到过这样的情况?我不确定如何进行。 谢谢! 编辑 当我说版本时,我并不是说像版本号。它们实际上是具有相同基础的不同应用程序。
12 git 


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.