Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Version control 如何实际使用源代码管理系统?_Version Control - Fatal编程技术网

Version control 如何实际使用源代码管理系统?

Version control 如何实际使用源代码管理系统?,version-control,Version Control,所以我知道你们中的大多数人都对我目前没有使用任何源代码管理表示不满。我想,我真的想,现在我已经花了一些时间阅读了这里的问题/答案。我是一个业余程序员,除了tinker真的不做更多的事情,但我已经被咬了好几次了,因为我手头没有“时间机器” 我仍然需要决定我将使用哪种产品,但这与这个问题无关 我真的在与源代码控制下的文件流作斗争,以至于我甚至不知道如何理智地提出这个问题 目前,我有一个目录层次结构,其中所有PHP文件都位于Linux环境中。我在那里编辑它们,然后在我的浏览器上点击“刷新”,看看会发生

所以我知道你们中的大多数人都对我目前没有使用任何源代码管理表示不满。我想,我真的想,现在我已经花了一些时间阅读了这里的问题/答案。我是一个业余程序员,除了tinker真的不做更多的事情,但我已经被咬了好几次了,因为我手头没有“时间机器”

我仍然需要决定我将使用哪种产品,但这与这个问题无关

我真的在与源代码控制下的文件流作斗争,以至于我甚至不知道如何理智地提出这个问题

目前,我有一个目录层次结构,其中所有PHP文件都位于Linux环境中。我在那里编辑它们,然后在我的浏览器上点击“刷新”,看看会发生什么

据我所知,我的文件现在位于不同的地方。当我想要编辑时,我会将其签出并编辑掉。但我的F5替代品是什么?如何测试它?我是否必须重新签入,然后按F5键?我承认在我的工作中有过一些尝试和错误。我想我会对频繁的小变动感到厌倦。我肯定错过了什么,对吧


有谁能告诉我什么东西都在哪里,我是如何测试的,同时又能实现“时间机器”的目标吗?

Eric Sink对源代码管理基础知识有很好的理解。他的公司(Sourcegear)生产一种名为Vault的源代码管理工具,但操作方法通常与系统无关。

您的硬盘上仍然有所有文件,可以使用F5


不同之处在于,您可以将文件“检查点”到存储库中。你的日常生活根本不需要改变。

你可以对你当前工作的同一目录进行“签出”,这样就不需要改变。基本上,您的工作目录不需要更改。

这是一个非常开放的问题,因为如何使用SCM在很大程度上取决于您选择的SCM。像git这样的分布式SCM与像Subversion这样的集中式SCM的工作原理非常不同

svn对于“新用户”来说更容易理解,但git功能更强大,可以改进您的工作流程。Subversion还提供了非常好的文档和工具支持(如trac),以及一本您应该阅读的在线书籍:

它将涵盖源代码管理的基础知识,无论您最终选择哪种SCM,这些知识都将在某种程度上帮助您,因此我建议您浏览前几章


编辑:顺便说一句,让我指出人们为什么对你皱眉:SCM不仅仅是“代码的备份”。拥有“时间机器”一点也不像SCM。使用SCM,您可以返回更改历史记录,查看您实际更改的内容以及更改的时间,而这是一堆代码永远无法得到的。我肯定你不止一次问过自己:“这段代码是怎么来的?”或者“我想我已经修复了那个bug”——如果你这么做了,那就是你需要SCM的原因。

如果你在使用Subversion,你只需签出一次文件。然后,每当您进行了重大更改(或准备吃午饭或其他什么),您都会将它们提交到服务器。这样,您可以通过按F5来保持旧的工作流程,但每次提交时,您都会在SVN存储库中以当前状态保存所有文件的副本。

根据源代码管理系统的不同,“签出”可能意味着不同的事情。在SVN的世界中,它只意味着从存储库中检索(可能是更新,也可能是新文件)最新的副本。在源代码安全的环境中,这通常意味着更新现有文件并锁定它。以下文字使用SVN含义:

使用PHP,您要做的是将整个项目/站点签出到测试apache站点上的工作文件夹中。您应该设置存储库,以便只需一次签出即可完成此操作,包括任何必要的子文件夹。您可以签出项目以一次性设置此设置

现在,您可以进行更改,并按F5以正常刷新。当您对支持特定修复或功能的一组更改感到满意时,您可以作为一个单元提交(当然,有适当的注释)。这会将最新版本放入存储库中


每次签出/提交一个文件会很麻烦。

事实上,您的文件虽然存储在源存储库中(硬盘上的另一个地方或其他地方的硬盘),但也可以存在于您的本地计算机上,就在它们现在存在的地方

因此,如果您使用VSS(不确定SVN、CVS等),所有未签出的文件都将标记为“只读”。因此,您仍然可以通过点击“F5”来运行您的网站,它将重新加载当前所在的文件。如果您签出一个并对其进行编辑,它将变为非只读,您可以对其进行更改


无论如何,您正在运行的web服务器将加载具有相同效果的只读/可写文件。

取决于您使用的源代码管理系统。例如,对于subversion和cvs,您的文件可以驻留在远程位置,但您总是在本地签出自己的副本。此本地副本(通常称为
工作副本
)只是文件系统上的常规文件,其中包含一些元数据,以便您将更改上载回服务器


如果您使用的是Subversion,这里有一个例子

  • 不要在生产环境中编辑代码
  • 使用适当的服务(apachew/mod_-php)创建一个开发环境
  • 开发环境中的应用程序目录是您进行工作的地方
  • 将您当前的生产应用程序放在那里
  • 将此目录提交到源代码管理工具。(现在您已经用应用程序填充了源代码管理)
  • 在您的新开发环境中进行更改,当您想要查看/测试您所更改的内容时,点击F5
  • 合并/提交对源代码管理的更改
  • 你不必“必须”改变你的工作流程
    $ which svn
    /usr/bin/svn
    
    $ apt-get install subversion
    
    $ apt-cache search subversion
    
    $ apt-cache search svn
    
    $ cd /path/to/directory/of/repositories
    $ svnadmin create my_repository
    
    $ cd /repos/on/your/local/machine
    $ svn co svn+ssh://www.myserver.com/path/to/directory/of/repositories/my_repository
    
    $ cd /repos/on/your/local/machine
    $ cd my_repository
    $ svn mkdir branches
    $ svn mkdir tags
    $ svn mkdir trunk
    $ svn commit -m "Initial structure"
    
    $ 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
    
    $ cd /repos/on/your/local/machine
    $ svn status
    
    $ cd /repos/on/your/local/machine
    $ svn up