使用Git像程序员一样管理文件版本

如果您曾经与同事一起处理过文档,则您会感到很痛苦:有人先通过了( document.doc ),然后通过电子邮件将其发送给所有人。下一个人和第三个人一样,都对文件名添加了修订( document_rev3.doc )。经理喜欢她所看到的内容并将其标记为完整( document_final.doc )…直到最后一刻发生变化( document_final_Aaron的changes_reviewed_by_Bob_now_really_final.doc )。

使用中的版本控制概述

VCS的主要目的是捕获文件的版本(也称为修订)。这意味着不依赖上述粗略方法。在这些系统中,当您访问“ document.doc"时,默认情况下您使用的是最新版本。但是,您也可以返回文件的历史记录并检索以前的版本。专为管理文件版本而构建的系统始于软件开发,但也已进入更多“主流"应用程序。

版本控制应用程序最初是为了防止程序员相互破坏而创建的。码。第一个系统仅允许用户锁定其他编辑中的文件,而第二代系统(例如Subversion)从中央存储库添加了整个项目的签出。

尽管这些第二代系统仍被广泛使用,该行业正在向第三代系统迁移。这些系统的主要特点是分布式,这意味着没有中央存储库。而是,每个用户都有自己的存储库完整副本(包括所有以前的修订版)。但是任何更改(甚至完整修订版)都是“本地的",直到他“将其推入"另一个存储库。然后,该用户可以拉出克隆以进行更改并重复该过程。

捕获同一事物的多个版本的能力也是普通用户的常见功能。通过在本地计算机上以及通过易于使用的云服务访问便宜的存储,用户现在可以跟踪其文件的历史记录。通用程序可以通过多种方式执行此操作。

操作系统可以捕获文件或文件夹的历史记录。每次保存文件时都会自动发生这种情况,或者定期执行。某些桌面应用程序也可以让您捕获文件的版本或快照。例如,LibreOffice提供了“保存版本"功能(如下图所示),可让您将文档的多个版本保存在一个文件中。最后,Web /云应用程序(例如Google Drive,ownCloud等)还将在后台或在您的明确命令下保留文件或文档的过去迭代(如下面底部图像中针对Google Docs所示)。

由于操作系统或应用程序级别的所有这些选项已经存在,为什么还要烦恼这些讨厌的编程器工具?上面的方法有两个缺点,包括:

  • 某些操作系统会将您所做的每一次调整都保存到新版本的文件中。这不仅会占用不必要的存储空间,还会使识别文件的特定还原点变得困难。
  • 这些解决方案还可以使用文件作为基本单位进行管理。但是版本控制系统通常在目录级别(包括子目录)上工作。 VCS使您可以轻松准确地查看更改的文件和更改的时间。
  • 在大多数情况下,这些相同的解决方案也使您无法标记迭代。同样,这也使得在意识到文件的精妙之处之前就很难通过覆盖了文本的文本来查找文件。
  • 通过操作系统和Word等应用程序进行版本控制也会引入单点故障。对于Word,文件本身就是文件(如果文件损坏,也请对您以前的所有副本说再见)。对于操作系统,它是硬盘驱动器。
  • 基于Web的服务的性质意味着您较旧的修订可能会存在于云中。例如,如果您尝试在Linux上查看Dropbox文件的历史记录(如下图所示),则会将您重定向到网站。
  • 如果这些问题中的任何一个或全部使您想要了解更多信息,请查看下一节我们使用 Git 解决问题的地方。

    使用Git进行版本控制

    在以下各节中,我们将进行介绍对于一个非常重要的项目,每个步骤都是如此:本文。我们将使用命令行版本的Git。了解终端命令将使查找它们的GUI等效项变得很容易,并且可以保证您可以在每个平台上使用它。

    如果您的计算机未安装git(Mac也会这样做)一些Linux发行版),您可以从项目的下载页面中获取Windows安装程序,也可以使用命令(特定于您的发行版)在Linux上进行安装,例如: git 存储库,它只是保存项目的文件夹。要利用Git版本控制,您需要初始化该文件夹作为存储库。您可以在命令行中使用以下命令执行此操作:

    git init

    完成后可能看不到任何内容,但是在文件管理器中启用了“显示隐藏的文件"选项,然后您会看到一个新的 .git 文件夹(如上图所示)。这是git保留其所有信息的地方,因此您无法使用它。

    下一步是在项目中创建一些内容(文件)。这些可以是任何类型的文件,因为大多数编程项目都是由代码(文本)和资产(如图形)(二进制)组成的。创建完成后,仍在项目目录中的命令行执行以下操作:

    git status

    提交的第一步是“暂存"新的或更新的项目。看看上面的输出如何让您知道“未暂存"的更改吗?您可以使用以下命令暂存目录中的所有内容(递归,即包括子文件夹及其文件):

    git -a .

    “-a"标志表示“添加",句点指代当前目录。基本上是说“将所有文件添加到我的提交中。"现在要真正进行提交,请键入以下内容:

    git commit -m "WHOOP, my first commit!"

    现在,再次检查状态时,无需等待更改。要查看提交本身,请使用图形模式检查git日志,并将列表剪切为一行,并使用修饰进行可读性分析:

    git log --all --decorate --oneline --graph

    这将向您显示一个不错的提交时间表,其中最近提交的内容排在最前面。

    在工作时,您可能想朝某个特定方向前进,不知道如果要解决的话。为此,您需要使用以下命令创建一个分支:

    git branch experiment1git checkout experiment1

    第二条命令将您切换到“ experiment1"分支。您可以将其替换为“ master"。在开始处理文本时,请注意每个分支中的相同文件之间的区别。首先,在“ experiment1"分支中输入新文本:

    将其与原始文本进行比较:

    现在工作一段时间(结束新提交)后,最好您可能想出的是“ Lorem ipsum dolor坐……"?那是什么?这是胡扯,应该立即从您的项目中删除。您可以使用以下命令(“ -D"强制删除)来破坏分支:

    git branch -D experiment1

    现在启动另一个分支并添加一些智能内容以及一些图像:

    git branch experiment2git checkout experiment2 git add . git commit -m "More text, added images"

    最后,一旦对当前分支中的更改感到满意,则以下命令会将它们与“ master"分支合并。如果您没有在这两者之间做很多来回的跳动,这将导致您应用了所有新更改,并创建了一个新修订。命令行中的以下内容将为您组合它们:

    git merge experiment2

    现在,您将获得一个修订版本,该版本将“ master"中的最新内容与“ experiment2"中的最新内容结合在一起。使用以下方法摆脱实验(毕竟是成功的):

    git branch -d experiment2

    请注意,如果这样做,您只会丢失在该分支中所做的任何增量更改。

    最后,Git是一个分布式系统,这意味着您可以拥有存储库的多个副本并进行同步。例如,在可以使用以下命令SSH进入的服务器上创建一个新的存储库:

    git init --bare

    “-bare"标志将其设置为一种只读存储库,因为您不能直接修改文件。然后,您可以使用以下命令将其设置为本地存储库的远程副本(第一个命令可确保远程创建新的本地分支):

    git config push.default matchinggit remote add central ssh://[username]@[URL]/path/to/repository git push --set-upstream central master

    设置使用Git进行版本控制和备份

    使用上述设置,您可以按照一个简单的过程来保存您在项目上所做的所有工作,不仅对其进行版本控制,而且还对其进行备份。

  • 对项目文件进行更改。
  • 发出“ git add"以将所有更改添加到提交中。
  • 发出“ git commit -m [some message]"以将更改提交到您的 local 存储库中。从头开始重复。
  • 发出“ git push"以定期将更改提交到远程存储库。
  • 发出“ git clone ssh:// [用户名] @ [URL] ] / path / to / repository"从其他计算机转移到
  • 版本控制系统的好处是否使您感兴趣?还是非开发备份应用程序足以满足您的需求?在下面的评论中让我们知道您的想法!

    标签: 文件管理