如果你曾经和同事一起写过一份文件,你就知道这种痛苦:有人先通过(文档.doc),然后发邮件给每个人。下一个人和第三个人做同样的事情,每个人在文件名上加上一个修订(document\u rev3.doc)。经理喜欢她所看到的,并将其标记为完整(文档)_最终.doc)... 直到最后一刻的变化出现(文件\u最终\u亚伦的变化\u审查\u鲍勃\u现在\u真的吗_最终.doc).
现在想象一下在几十个源代码文件中发生这样的变化。程序员创建了版本控制系统(VCS)来解决这个问题。它们在本质上有点技术性,但对高级用户也很有用。让我们看看今天使用顶级系统Git进行版本控制的基础知识。
VCSs的主要目的是捕获文件随时间变化的版本(也称为修订版)。这意味着不要依赖像上面描述的那种粗糙的方法。在这些系统中,当您访问文档.doc“默认情况下,您使用的是最新版本。但是您也可以返回到文件的历史记录并检索过去的版本。专门为管理文件版本而构建的系统始于软件开发,但也进入了更“主流”的应用程序。
版本控制应用程序最初是为了防止程序员破坏彼此的代码而产生的。第一代系统只允许用户锁定其他编辑的文件,而第二代系统(如Subversion)则添加了从中央存储库进行的完整项目签出。
虽然这些第二代系统仍在广泛使用,但该行业正在向第三代系统转移。这些系统的主要特点是它们是分布式的,这意味着没有中央存储库。相反,每个用户都有自己的存储库的完整副本(包括所有以前的修订版)。但是任何更改(甚至是完整的修订)都是“本地”的,直到他将它们“推”到另一个存储库。然后,该用户可以提取克隆以进行更改并重复该过程。
捕获同一事物的多个版本的能力也是普通用户的共同特征。通过在本地计算机上和通过易于使用的云服务访问更便宜的存储,用户现在可以跟踪其文件的历史记录。通用程序以多种方式实现这一点。
操作系统可以捕获文件或文件夹的历史记录。这可以在每次保存文件时自动执行,也可以按常规计划执行。一些桌面应用程序还允许您捕获文件的版本或快照。例如,LibreOffice提供了“保存版本”功能(如下图所示),允许您在一个文件中保存文档的多个版本。最后,Google Drive、ownCloud等web/cloud应用程序也会将过去的文件或文档迭代(如下图中Google文档所示)保存在后台或您的express命令下。
既然操作系统或应用程序级别的所有这些选项都已经存在,为什么还要费心使用这些乏味的程序员工具呢?上述方法有几个缺点,包括:
如果这些问题中的任何一个或所有让您想要更多的东西,请查看下一节,我们将用Git解决这些问题。
在下面的小节中,我们将为一个非常重要的项目逐一介绍这些步骤:本文。我们将使用Git的命令行版本来实现这一点。了解终端命令可以很容易地找到它们的GUI等价物,并保证您可以在每个平台上使用它。
如果您的计算机没有安装git(Mac和某些Linux发行版一样),您可以从项目的下载页获取Windows安装程序,或者使用命令(特定于您的发行版)在Linux上安装,例如:
sudo apt install git接下来我们需要做的是建立一个git存储库,它只是一个存放项目的文件夹。要利用Git版本控制,您需要将文件夹初始化为存储库。可以在命令行中使用以下命令执行此操作:
git init完成后,您可能看不到任何内容,但在文件管理器中启用“显示隐藏文件”选项,您将看到一个新的.git文件夹(如上图所示)。这是git保存所有信息的地方,所以它不会妨碍你。
下一步是在项目中创建一些内容(文件)。这些文件可以是任何类型的文件,因为大多数编程项目都由代码(文本)和图形(二进制)等资产组成。创建后,仍在项目目录中时,在命令行中执行以下操作:
git status提交的第一步是“暂存”新的或更新的项。看看上面的输出如何让你知道有“未老化”的变化?您可以使用以下命令暂存目录中的所有内容(递归,即包括子文件夹及其文件):
git -a .“-a”标志表示“add”,句点指当前目录。基本上是说“将所有文件添加到我的提交中”。现在要真正进行提交,请键入以下内容:
git commit -m "WHOOP, my first commit!"现在,当您再次检查状态时,应该没有等待的更改。要查看提交本身,请使用图形模式检查git日志,将列表剪切为一行,并进行修饰以确保可读性:
git log --all --decorate --oneline --graph这将向您展示一个很好的提交时间表,最新的在最上面。
当你工作的时候,你可能想朝一个特定的方向走,不知道它是否会成功。为此,您需要使用以下命令创建分支:
git branch experiment1git checkout experiment1第二个命令将您切换到“experiment1”分支。您可以通过将其替换为“master”进行切换。当您开始处理文本时,请注意每个分支中相同文件之间的差异。首先,“experiment1”分支包含您的新文本:
将此项与原始项进行比较:
现在,在工作了一段时间后(以一个新的提交结束),你能想到的最好的方法是“Lorem ipsum悲哀坐在amet…?”那是什么?这是胡说八道,应该立即从你的项目中删除。您可以使用以下命令(force delete为“-D”)将分支丢弃:
git branch -D experiment1现在开始另一个分支并添加一些智能内容,以及一些图像:
git branch experiment2git checkout experiment2 git add . git commit -m "More text, added images"最后,一旦您对当前分支中的更改感到满意,下面的命令将把它们与“主”分支合并。如果您没有在这两者之间来回跳转太多,这将导致应用所有新更改,并创建新修订。命令行中的以下命令将为您合并它们:
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通过上面的设置,您可以按照一个简单的过程来保持对项目所做的所有工作不仅进行版本控制,还可以进行备份。
版本控制系统的好处让你感兴趣吗?或者非开发备份应用程序是否足以满足您的需要?请在下面的评论中告诉我们您的想法!
...存它们。项目的这些不同保存状态称为版本。例如,如果程序员正在构建一个网站,它将存储为版本1。稍后,如果程序员向该网站添加另一个页面,则这些更改将保存为版本2。同样,在版本控制系统中,更改会另存为版本。Git...
...行的版本控制服务,面向使用Git存储和控制代码的计算机程序员。代码存储在存储库中,这些存储库只是云服务器上的容器,允许您从所有计算机访问代码。 ...
...储库的名称和描述可以是您想要的任何内容,在本例中,使用“muo\u demo”作为名称。其余字段保持原样/空白,然后单击“创建新存储库”按钮。您将进入一个显示新的空白存储库的页面。 ...
...,您刚刚用Python完成了一个简单的公文包网站,并且希望使用免费托管来建立它。你听说过Heroku的免费托管,但你不太了解其中的技术细节。 ...
...ind命令的一个更简单的替代方法。它有一个简化的语法,使用合理的默认值,并具有内置的常识行为。让我们看看它的步调。 fd和find有什么区别? fd命令并不意味着要取代传统的find命令,find命令在Linux上已经存在了很久。相...
...比如Dropbox)或在线编辑器(比如googledocs),而有些人则使用桌面应用程序(比如microsoftword)。我用一种叫做GitHub的东西。 github:它不仅仅是为了代码 我使用Git和GitHub来存储和访问我所有的写作。Git是一个有效的工具,您可以...
...版本控制程序来管理Linux内核的代码库。它现在是世界上使用最广泛的版本控制软件。有数以百万计的人在用它。 使用Git,项目的代码库存储在存储库中。除了位于开发人员计算机上的本地存储库,也许还有位于网络中央服务器...