所以我得到你们大多数人都皱着眉头因为目前没有使用任何源代码控制。我想,我真的这么做,因为我花了一些时间在这里阅读问题/答案。我是一个业余爱好的程序员,并没有做太多的修补,但我已经被咬了几次现在没有'时间机'方便...
我仍然需要决定使用哪种产品,但这与此问题无关。
我真的在源代码管理下挣扎着文件流,所以我甚至不确定如何理智地提出这个问题。
目前我有一个目录层次结构,其中所有PHP文件都存在于Linux环境中。我在那里编辑它们并且可以在我的浏览器上点击刷新以查看会发生什么。
据我了解,我的文件现在位于不同的地方。当我想编辑时,我会检查并编辑。但是我对F5的替代品是什么?我该如何测试?我是否必须重新检查,然后点击F5?我承认我的工作中有一些反复试验。我怀疑我会厌倦快速检查和退出,以便我经常做出频繁的小改动。我必须遗漏一些东西,对吧?
任何人都可以指引我完成所有生活的地方以及我如何测试,同时保持“时间机器”方便的目标吗?
答案 0 :(得分:10)
Eric Sink在源代码管理基础知识方面有很棒的series of posts。他的公司(Sourcegear)制作了一个名为Vault的源代码控制工具,但该方法通常与系统无关。
答案 1 :(得分:5)
答案 2 :(得分:2)
实际上,您的文件虽然存储在源存储库中(硬盘驱动器上另一个地方的大字,或其他地方的硬盘驱动器),也可以存在于本地计算机上,就在它们现在存在的位置。 / p>
因此,如果您使用VSS(不确定SVN,CVS等),所有未签出的文件将被标记为“只读”。因此,您仍然可以通过点击“F5”来运行您的网站,它将重新加载它们当前所在的文件。如果您检查一个并正在编辑它,它将变为非只读,您可以更改它。
无论如何,您运行的Web服务器将加载具有相同效果的只读/可写文件。
答案 3 :(得分:1)
您没有“必须”以激烈的方式更改您的工作流程。你可以,在某些情况下你应该,但这不是版本控制所指示的。
您只需像平常一样使用这些文件。只有在版本控制下,一旦达到“完成”状态或至少“正常工作”状态(解决问题跟踪器中的问题,完成某种方法,调整某些内容等),您就可以将其签入。
如果您的代码库中有多个开发人员,请务必定期更新,因此您始终会对最近(合并)的代码版本进行操作。
答案 4 :(得分:1)
我建议使用分布式版本控制系统(mercurial,git,bazaar,darcs),而不是集中版本控制系统(cvs,svn)。它们更容易设置和使用。
尝试使用mercurial(这是我用来理解版本控制如何工作的VCS)然后如果你愿意,你甚至可以转移到git。
有关Mercurial主页的非常好的入门教程:Understanding Mercurial。这将向您介绍VCS的基本概念以及工作原理。真的很棒。之后,我建议您继续使用Mercurial教程:Mercurial tutorial page,它将教您如何实际使用Mercurial。最后,你有一个免费的电子书,它是如何使用Mercurial的一个非常好的参考:Distributed Revision Control with Mercurial
如果你有更多的冒险精神并想立即开始使用Git,那么这本免费电子书是一个很好的起点:Git Magic(非常容易阅读)
最后,无论您选择哪种VCS工具,您最终会做的是:
这就是它。
答案 5 :(得分:1)
好问题。使用源代码控制,您仍然可以执行“F5”刷新过程。但是,在每次编辑(或一些小编辑)之后,您需要检查代码,以便备份副本。
根据源控制系统的不同,您不必每次都明确签出文件。只需编辑文件即可查看。我写过a visual guide to source control,许多人在学习基础知识时发现它很有用。
答案 6 :(得分:1)
以下是您使用非集中式源代码控制系统(如CVS或Subversion)的常规工作流程:首先,将当前项目导入所谓的存储库,即所有文件的版本化存储。注意只导入手工生成的文件(源文件,数据文件,makefile,项目文件)。生成的文件(目标文件,可执行文件,生成的文档)不应放入存储库。
然后你必须检查你的工作副本。顾名思义,这是您将进行所有本地编辑的地方,您将在其中进行编译以及将测试服务器指向的位置。它基本上是您之前工作的替代品。您只需要为每个项目执行一次这些步骤(当然,您可以查看多个工作副本。)
这是基本的工作周期:首先,您将存储库中所做的所有更改签出到本地工作副本中。在团队中工作时,这会带来自上次退房以来其他团队成员所做的任何更改。然后你做你的工作。当您完成一组工作后,您应该再次检查当前版本并解决由于其他团队成员的更改而可能发生的冲突。 (在一个训练有素的团队中,这通常不是问题。)测试,当一切按预期工作时,您提交(签入)您的更改。然后,您可以继续工作,一旦完成,请检查,解决冲突,然后再次登记。请注意,您应该只提交经过测试和工作的更改。您多久检查一次是一种品味问题,但一般规则是您应该在一天结束时至少提交一次更改。就个人而言,我更频繁地提交我的更改,基本上每当我做出一组通过所有测试的相关更改时。
答案 7 :(得分:1)
这是一个非常开放的问题,因为您使用SCM的方式在很大程度上取决于您选择的SCM。像git这样的分布式SCM与Subversion等集中式SCM的工作方式非常不同。
svn更容易为“新用户”消化,但git可以更强大一些并改善您的工作流程。 Subversion还有很棒的文档和工具支持(比如trac),还有一本你应该阅读的在线书籍:
它将涵盖源代码管理的基础知识,无论您最终选择哪个SCM,它都会以某种方式帮助您,所以我建议略读前几章。
编辑:让我指出为什么人们皱着眉头,顺便说一下:SCM不仅仅是“代码的备份”。拥有“timemachine”就像SCM一样。使用SCM,您可以返回更改历史记录,查看实际更改的内容以及何时永远不会获取代码blob的内容。我确定你不止一次问过自己:“这段代码怎么来的?”或者“我以为我修复了那个错误” - 如果你这样做了,那就是你需要SCM的原因。
答案 8 :(得分:1)
您可以对当前工作的目录进行“结帐”,这样就不必更改了。基本上你的工作目录不需要改变。
答案 9 :(得分:1)
您仍然拥有硬盘上的所有文件,为F5做好准备!
不同之处在于您可以将文件“检查”到存储库中。你的日常生活根本不需要改变。
答案 10 :(得分:0)
取决于您使用的源控制系统。例如,对于subversion和cvs,您的文件可以驻留在远程位置,但是您始终可以在本地检出自己的副本。此本地副本(通常称为working copy
)只是文件系统上的常规文件,带有一些元数据,可让您将更改上传回服务器。
如果你在这里使用Subversion是good tutorial。
答案 11 :(得分:0)
根据源控制系统,“结账”可能意味着不同的事情。在SVN世界中,它只意味着从存储库中检索(可能是更新,可能是新文件)最新副本。在源安全的世界中,这通常意味着更新现有文件并将其锁定。以下文本使用SVN含义:
使用PHP,您要做的是将整个项目/站点检出到测试apache站点上的工作文件夹。您应该设置存储库,以便在单个结帐时发生这种情况,包括任何必要的子文件夹。您签出项目以将其设置为一次。
现在您可以进行更改并按F5正常刷新。当您对一组支持特定修补程序或功能的更改感到满意时,您可以提交作为一个单元(当然,还有适当的注释)。这会将最新版本放入存储库中。
一次检出/提交一个文件会很麻烦。
答案 12 :(得分:0)
如果您使用的是Subversion,则可以查看一次的文件。然后,无论何时你做了很大的改变(或者要去吃午饭或其他什么),你都将提交给服务器。这样,您可以通过按F5保持旧的工作流程,但每次提交时,都会在SVN存储库中保存当前状态的所有文件的副本。
答案 13 :(得分:0)
源控制系统通常是您的文件及其历史记录的存储位置,通常与您当前正在处理的文件分开。它取决于版本控制系统的类型,但假设您正在使用类似CVS的东西(如subversion),那么所有文件都将存在于两个(或更多)位置。您拥有本地目录中的文件,即所谓的“工作副本”和存储库中的文件,这些文件可以位于另一个本地文件夹中,也可以位于通常通过网络访问的另一台计算机上。通常,在首次将文件导入存储库后,您可以在工作文件夹下查看它们,然后继续处理它们。我假设这将是您的PHP文件现在所在的文件夹。
现在当您签出副本并进行了一些想要“保存”的非平凡变更时会发生什么?您只需将工作副本中的更改提交到版本控制系统即可。现在您有了更改的历史记录。如果您希望返回到您提交这些更改的版本,那么您只需将工作副本还原为较旧的版本(一次性提交的更改集的名称)。
请注意,这都是非常特定的CVS / SVN,因为GIT的工作方式略有不同。我建议从颠覆开始,阅读非常优秀的SVN Book的前几章,以便开始。
答案 14 :(得分:0)
这一切都非常主观,具体取决于您决定使用的源控制解决方案。你肯定想要研究的是Subversion。
你提到你在做PHP,但是你是在Linux环境还是Windows中做的?这并不重要,但我在PHP环境中工作时通常做的就是拥有一个生产分支和一个开发分支。这允许我配置一个cron作业(Windows中的计划任务),以便从生产服务器的生产就绪分支中自动拉出,同时从我的开发服务器的开发分支中提取。
一旦你决定了一个工具,你应该花一些时间来学习它是如何工作的。例如,签入和签出的概念不适用于所有源控制解决方案。无论哪种方式,我强烈建议您选择一个允许分支的方法。 This article在生产环境中遵循了一个很好的(在我看来)源代码控制模型。
当然,我说这些都没有多年“修补”。我已经做了一段时间的专业发展,而且我的技术可能对你所在位置的人来说太过分了。但并不是说这有什么不妥。
答案 15 :(得分:0)
我只想补充一点,我认为最容易设置和使用的系统是Mercurial。如果你单独工作而不是团队工作,你只需在正常的工作文件夹中初始化它,然后从那里继续。正常的流程是使用您喜欢的编辑器编辑任何文件,然后进行签入(提交)。 我没有尝试过GIT,但我认为它非常相似。 Monotone开始时有点困难。这些都是分布式源控制系统。
答案 16 :(得分:0)
听起来您正在询问如何使用源代码管理来管理版本。
以下是一些并非针对网站的一般性指导:
如果您拥有一个小团队,一个稳定的产品,一个快速构建和高效,高质量的测试,那么整个过程可能是100%自动化的,可以在几分钟内完成。
答案 17 :(得分:0)
我建议Subversion。即使从命令行,设置存储库并使用它实际上也是相当简单的。这是怎么回事:
$ which svn
/usr/bin/svn
是一个工具,可以告诉您其他工具的路径。如果它没有返回任何系统上没有安装该工具
$ apt-get install subversion
apt-get 是一个将其他工具安装到您的系统上的工具
如果这不是apt中subversion的正确名称,请尝试使用
$ apt-cache search subversion
或者
$ apt-cache search svn
找到正确的软件包名称并使用 apt-get install packagename
进行安装$ cd /path/to/directory/of/repositories
$ svnadmin create my_repository
svnadmin create reponame 在当前工作目录( pwd )中创建一个名为 reponame
的新存储库您正式完成了创建存储库
$ cd /repos/on/your/local/machine
$ svn co svn+ssh://www.myserver.com/path/to/directory/of/repositories/my_repository
svn co </ em>是用于签出存储库的命令
$ cd /repos/on/your/local/machine
$ cd my_repository
$ svn mkdir branches
$ svn mkdir tags
$ svn mkdir trunk
$ svn commit -m "Initial structure"
svn mkdir 运行常规的 mkdir 并在输入 svn mkdir 之后使用您提供的名称在当前工作目录中创建一个目录,然后将它添加到存储库。
svn commit -m“”将您的更改发送到存储库并进行更新。无论你在 -m 之后在引号中放置什么,都是这个提交的注释(让它计数!)。
代码的“工作副本”将放在 trunk 目录中。 branches 用于处理主干外的个别项目; 分支中的每个目录都是不同子项目的 trunk 的副本。 标记用于更多版本。我建议只关注 trunk 一段时间并习惯Subversion。
$ cd /repos/on/your/local/machine
$ svn add my_new_file.ext
$ svn add some/new/directory
$ svn add some/directory/*
$ svn add some/directory/*.ext
倒数第二行添加该目录中的每个文件。最后一行添加扩展名为.ext。
的每个文件$ cd /repos/on/your/local/machine
$ svn status
这将告诉您是否有任何新文件,更新文件和存在冲突的文件(本地版本与服务器上的版本之间存在差异)等。
$ cd /repos/on/your/local/machine
$ svn up
更新会从您尚未拥有的服务器中提取任何新更改
svn up 确实关心您所在的目录。如果您想要更新整个存储库,请确保您位于存储库的根目录中(在主干上方)
这就是你开始真正需要知道的全部内容。有关详情,建议您查看Subversion Book。