原作者:杰森科茨 翻译&转载:https://www.digitalocean.com/community/tutorials/how-to-use-git-effectively
现代软件开发中不可或缺的工具是某种版本控制系统。版本控制系统允许您在源级别跟踪软件。您可以跟踪更改,还原到以前的阶段,然后分支以创建文件和目录的备用版本。
最流行的版本控制系统之一是git
分布式版本控制系统。许多项目将文件保存在git存储库中,而像GitHub和Bitbucket这样的站点已经使代码共享和贡献简单而有价值。
在本指南中,我们将演示如何在Ubuntu 14.04 VPS实例上安装git。我们将介绍如何以两种不同的方式安装软件,每种方式都有好处。本教程假设您以非root用户身份登录,您可以在此处了解如何创建。
到目前为止,git
安装和使用的最简单方法是使用Ubuntu的默认存储库。这是最快的方法,但版本可能比最新版本更旧。如果您需要最新版本,请考虑按照git
从源代码编译的步骤进行操作。
您可以使用apt
包管理工具更新本地包索引。之后,您可以下载并安装该程序:
sudo apt-get update
sudo apt-get install git
RedHat/Fedora/Centos系统
Mac OS X 系统
这将下载并安装git
到您的系统。您仍然需要完成我们在“设置”部分中介绍的配置步骤,因此请立即跳到该部分。
更灵活的安装方法git
是从源代码编译软件。这需要更长时间,并且不会通过您的软件包管理器进行维护,但它允许您下载最新版本,并且如果您希望自定义,将允许您对所包含的选项进行一些控制。
在开始之前,您需要安装git
依赖的软件。这在默认存储库中都可用,因此我们可以更新本地包索引,然后安装包:
sudo apt-get update
sudo apt-get install build-essential libssl-dev libcurl4-gnutls-dev libexpat1-dev gettext unzip
安装必要的依赖项后,您可以通过访问GitHub上的git项目页面继续获取所需的git版本。
到达项目页面时看到的版本是主动提交的分支。如果您需要最新的稳定版本,您应该使用项目标题左侧的此按钮将分支更改为最新的非“rc”标记:
接下来,在页面右侧,右键单击“下载ZIP”按钮,然后选择类似于“复制链接地址”的选项:
回到您的Ubuntu 14.04服务器上,您可以wget
通过粘贴您复制的地址来键入并关注它。您复制的URL可能与我的不同:
wget https://github.com/git/git/archive/v1.9.2.zip -O git.zip
通过键入以下内容解压缩您下载的文件并移动到生成的目录中:
unzip git.zip
cd git-*
现在,您可以通过键入以下两个命令来创建包并进行安装:
make prefix=/usr/local all
sudo make prefix=/usr/local install
既然已经git
安装了,如果要升级到更高版本,只需克隆存储库,然后构建并安装:
git clone https://github.com/git/git.git
要查找用于克隆操作的URL,请导航到项目的GitHub页面上所需的分支或标记,然后复制右侧的克隆URL:
这将在您当前目录中创建一个新目录,您可以在其中重建包并重新安装新版本,就像您上面所做的那样。这将使用新版本覆盖旧版本:
make prefix=/usr/local all
sudo make prefix=/usr/local install
现在您已经git
安装了,您需要做一些事情,以便为您生成的提交消息将包含您正确的信息。
最简单的方法是通过git config
命令。具体来说,我们需要提供我们的姓名和电子邮件地址,因为git
我们会在每次提交中嵌入此信息。我们可以通过键入以下内容来添加此信息:
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
我们可以通过键入来查看已设置的所有配置项:
git config --list
git配置
user.name=Your Name
[email protected]
如您所见,这种格式略有不同。信息存储在配置文件中,您可以选择使用文本编辑器手动编辑,如下所示:
nano ~/.gitconfig
〜/ .gitconfig内容
[user]
name=Your Name
[email protected]
您可以设置许多其他选项,但这些是需要的两个必要选项。如果您跳过此步骤,则在提交时可能会看到git
与此类似的警告:
git用户名和电子邮件未设置时输出
[master 0d9d21d] initial project version
Committer: root
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:
git config --global user.name "Your Name"
git config --global user.email [email protected]
After doing this, you may fix the identity used for this commit with:
git commit --amend --reset-author
这样可以为您提供更多功能,因为您必须修改已使用更正信息所做的提交。
您现在应该已经git
安装并准备好在您的系统上使用。
本文假设您已安装git并且您的全局配置设置(即用户名和电子邮件)已正确设置。如果不是这种情况,请参阅 git介绍教程。
Git是一个非常有用的软件,可以帮助简化编程项目的开发。它没有语言要求也没有文件结构要求,让开发人员可以决定如何构建工作流程。
在使用git进行开发之前,最好规划好工作流程。工作流程决策通常基于项目的规模和规模。为了现在对git有一个基本的了解,一个简单的单分支工作流就足够了。默认情况下,任何git项目上的第一个分支称为“master”。在本系列的后续教程中,您将学习如何创建其他分支。
让我们创建我们的第一个项目并称之为“测试”。(如果您已经有一个要导入到git的项目,可以跳到该部分。)
就像您希望拥有一个良好,干净的工作环境一样,同样的想法适用于编码的位置,特别是如果您要同时为多个项目做出贡献。一个很好的建议可能是在您的主目录中有一个名为git的文件夹,其中包含每个项目的子文件夹。
我们需要做的第一件事是创建我们的工作区环境:
user@host ~ $ mkdir -p ~/git/testing ; cd ~/git/testing
上面的命令将完成两件事:1)它在我们的主目录中创建一个名为“git”的目录,然后创建一个名为“testing”的子目录(这是我们的项目实际存储的地方)。2)它将我们带到我们项目的基本目录。
进入该目录后,我们需要创建一些将在我们的项目中的文件。在此步骤中,您可以跟随并创建一些虚拟文件以进行测试,也可以创建您希望将成为项目一部分的文件/目录。
我们将创建一个在我们的存储库中使用的测试文件:
user@host~ /git/testing $ touch file
一旦所有项目文件都在您的工作区中,您需要开始使用git跟踪文件。下一步解释了这个过程。
一旦所有文件都在你的git工作区中,你需要告诉git你想将当前目录用作git环境。
user@host ~/git/testing $ git init
Initialized empty Git repository in /home/user/git/testing/.git/
初始化新的空存储库后,您可以添加文件。
以下内容将所有文件和目录添加到新创建的存储库中:
user@host~/git/testing $ git add .
在这种情况下,没有输出是良好的输出。不幸的是,如果有效的话,git并不会总是告诉你。
每次添加或更改文件时,都需要编写提交消息。下一节将介绍提交消息的内容以及如何编写提交消息。
提交消息是一条简短的消息,解释您所做的更改。在发送编码更改之前需要它(称为推送),这是与您的共同开发人员进行通信的好方法。本节将介绍如何创建它们。
提交消息通常相当短,在一到两个句子之间解释您所做的更改。在推送之前提交每个单独的更改是一种好习惯。您可以根据需要推送尽可能多的提交。任何提交的唯一要求是它涉及至少一个文件并且它有一条消息。推送必须至少有一次提交。
继续我们的示例,我们将为初始提交创建消息:
user@host ~/git/testing $ git commit -m "Initial Commit" -a
[master (root-commit) 1b830f8] initial commit
0 files changed
create mode 100644 file
上述命令有两个重要参数。第一个是-m,表示我们的提交消息(在本例中为“Initial Commit”)将会跟随。其次,-a表示我们希望将提交消息应用于所有添加或修改的文件。这对于第一次提交是可以的,但通常您应该指定我们要提交的单个文件或目录。
我们本可以做到:
user@host~/git/testing $ git commit -m“Initial Commit” file
指定要提交的特定文件。要添加其他文件或目录,只需在该命令的末尾添加一个以空格分隔的列表。
到目前为止,我们已经完成了本地服务器上的所有操作。如果您希望有任何简单的方法来对文件进行版本控制,那当然可以选择在本地使用git。但是,如果您想与开发人员团队合作,则需要将更改推送到远程服务器。本节将解释如何执行此操作。
能够将代码推送到远程服务器的第一步是提供存储库所在的URL并为其命名。要配置要使用的远程存储库并查看所有远程控制器的列表(可以有多个远程存储库),请键入以下内容:
$ git remote add origin ssh://[email protected]/repository.git
$ git remote -v
origin ssh://[email protected]/repository.git(fetch)
origin ssh://[email protected]/repository.git(push)
第一个命令添加一个名为“origin”的远程,并将URL设置为ssh://[email protected]/repository.git。
您可以根据需要为远程命名,但URL需要指向实际的远程存储库。例如,如果您想将代码推送到GitHub,则需要使用它们提供的存储库URL。
配置完远程后,您现在可以推送代码了。
您可以通过键入以下内容将代码推送到远程服务器:
$ git push origin master
计数对象:4,完成。
Delta压缩最多使用2个线程。
压缩对象:100%(2/2),完成。
写入对象:100%(3/3),266字节,完成。
总计3(delta 1),重用1(delta 0)
至ssh://[email protected]/repository.git
0e78fdf..e6a8ddc master - > master
“git push”告诉git我们要推送我们的更改,“origin”是我们新配置的远程服务器的名称,“master”是第一个分支的名称。
将来,当您提交要提交到服务器的提交时,只需键入“git push”即可。
我希望本文能够让您基本了解git如何有效地用于开发人员团队。本系列的下一篇文章将对git分支及其如此有效的原因进行更深入的分析。
在版本控制系统领域,GIT可以说是灵活性方面最好的之一。学习语法并了解git如何最好地为您的工作流程和环境提供服务非常容易。本教程将教您如何创建两个分支(主和开发)以及如何将代码从开发阶段合并到生产中。分支的核心是一系列独特的代码更改,具有唯一的名称。每个存储库可以有一个或多个分支。
默认情况下,第一个分支称为“master ”。
在创建新分支之前,我们希望查看所有存在的分支。我们可以通过键入以下内容来查看所有现有分支:
git branch -a
在命令的末尾添加“-a”告诉GIT我们想要查看所有存在的分支,包括我们在本地工作空间中没有的分支。
输出看起来类似于以下内容:
* master
remotes/origin/master
输出第一行中“master”旁边的星号表示我们当前在该分支上。第二行简单地表明,在我们的远程命名原点上,有一个分支,也称为master。
现在我们知道如何查看分支,现在是时候创建第一个分支了。
如本文开头所述,我们希望为编码环境提供开发和生产设置。
我们将默认的“主”分支视为我们的生产,因此需要为开发或预生产创建一个分支。
要创建名为develop的新分支,请键入以下内容:
git checkout -b develop
假设我们还没有名为“develop”的分支,输出结果如下:
Switched to a new branch 'develop'
如果已经存在该名称的分支,GIT会告诉我们:
fatal: A branch named 'develop' already exists.
您可以使用git checkout命令在两个分支之间来回切换:
git checkout master
要么
git checkout develop
假设您尝试切换到的分支存在,您将看到类似于以下内容的输出:
切换到分支'主'
如果您尝试切换到不存在的分支,例如
git checkout nosuchbranch
Git会告诉你:
error: pathspec 'nosuchbranch' did not match any file(s) known to git.
既然我们有多个分支机构,我们需要充分利用它们。在我们的场景中,我们将使用我们的“开发”分支来测试我们的更改,并使用主分支将它们发布给公众。
为了说明这个过程,我们需要切换回我们的开发分支:
git checkout develop
在这个分支上,我们将创建一个名为“develop”的新空白文件。在我们将它合并到主分支之前(在下一步中),它将不存在。
touch develop
就像在上一个教程中一样,我们需要告诉git我们要跟踪这个新文件。
我们可以通过输入以下命令添加“develop”文件:
git add develop
上面的命令集将创建一个名为“develop”的空白文件,并将其添加到GIT。
我们还需要提交此文件,该文件将此文件附加到我们当前所在的分支,即“develop”。
git commit -m "develop file" develop
此文件现在存在于develop分支上; 正如我们要发现的那样,它在主分支上不存在。
首先,我们将确认我们目前正处于开发分支。我们可以通过输入以下内容来完成此操作
git branch
输出应类似于以下内容:
* develop
master
我们之前了解到,分支名称旁边的星号表示我们当前在该分支上。
运行“ls”命令将向我们显示存在两个文件:
ls
输出将告诉我们,我们的两个文件分别命名为“file”和“develop”:
develop file
有趣的部分是在我们切换回我们的主分支之后,我们可以使用git checkout命令:
git checkout master
为了确保我们在主分支上,我们可以运行以下类型:
git branch
输出将告诉我们哪个分支是一个,由星号表示。
develop
* master
再次运行“ls”,似乎我们的新文件丢失了。
file
它不会丢失 - 它在我们的开发分支上,我们在我们的主分支上。
在我们的场景中,此文件表示对已通过我们的开发分支上的所有测试的任何文件(或整个新文件)的任何更改,并且已准备好投入生产。在分支之间移动代码的过程(通常从开发到生产)称为合并。
重要的是要记住合并时,我们想要在我们想要合并的分支上。
在这种情况下,我们希望从我们的开发分支(存在“develop”文件)合并到我们的主分支。
牢记这一点,考虑到我们已经在主分支上,我们所要做的就是运行merge命令。
我们可以传递给merge命令的一个选项,即“--no-ff”,意味着我们希望git在合并之前保留所有提交消息。这将使跟踪更改在将来更容易。
要将更改从开发分支合并到主分支,请键入以下内容:
git merge develop --no-ff
该命令的输出将类似于以下内容:
Merge made by the 'recursive' strategy.
0 files changed
create mode 100644 develop
再次运行ls命令将确认我们的“develop”文件现在位于我们的主分支上。
develop file
我们现在需要做的最后一件事就是在我们的远程服务器上进行此更改是为了推动我们的更改,我们可以借助git push命令来完成这些更改。
git push
您将看到类似于以下的输出,确认您从开发分支到远程服务器上的主分支的合并:
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 332 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To ssh://[email protected]/repository
9af2dcb..53649cf master -> master
按照上面的教程,您应该有一个有效的双分支工作流程设置,并希望能够了解分支在GIT中的工作原理。请在留言中让我们知道你的想法!
英文原作者:杰森科茨
如果您对上述的教程仍然感觉还有些不足,可以查看视频教程:
Git入门:https://www.imooc.com/learn/1052
版本控制工具Git:https://www.imooc.com/learn/208
Git&Github的使用 https://classroom.udacity.com/courses/ud775
其他说明:
安装 Git
现在,你将有机会亲自使用 Git,并在 Asteroids 版本库上练习使用这些命令。为此,必须安装 Git。如果已安装 Git,请使用命令 git --version
查看其版本。如果版本为 1.8 或更高,则可以继续观看下一个视频。否则,强烈建议你进行升级,因为 Git 在版本 1.8 中添加了许多新功能,而且我们假定你装有该版本。
克隆版本库,要克隆版本库,请运行 git clone
(后跟空格和版本库 URL)。
Asteroids URL,使用以下 URL 克隆 Asteroids 版本库:
$ git clone https://github.com/udacity/asteroids.git
退出 git log
要停止查看 git log
的输出,请按 q
(表示退出)。
获得彩色输出
要获得彩色的 diff 输出,请运行 git config --global color.ui auto
从命令行复制并粘贴
为了完成本测试题,需要复制并粘贴一些提交的 ID。
Windows
要在 Git Bash 中复制并粘贴,请按照此页面中的说明执行操作。
Mac
要在 Mac 上的终端中复制并粘贴,请使用 Cmd+C 和 Cmd+V。
Ubuntu
要在 Ubuntu 上的终端中复制并粘贴,请使用 Ctrl+Shift+C 和 Ctrl+Shift+V。
使用 git log
和 git diff
请注意,运行 git log
会列出最近的提交及其相关信息(包括提交 ID)。运行 git diff
(后跟两个提交 ID)会比较这两个提交的代码版本。如果需要复习,可以重新观看此视频.
输入提交 ID
如果输入提交 ID 的前四个或更多个字符更为轻松,则你可以这样做,而不必粘贴整个 ID。
思考:使用 Git 浏览历史
既然你已具有亲自使用 Git 的经验,现在请将以下问题和你对它的想法添加到你的反思文件中:
如何使用命令 git log 和 git diff 来查看文件的历史记录?
在你更新了文档后,单击“下一项”,与 Sarah 一起将更多概念添加到图中。然后,你将学习如何使用 Git 恢复到文件的以前版本。
快速编辑模式
要开启快速编辑模式以便在 GitBash 中更轻松地进行复制和粘贴,请按照此处的说明操作。
最新的提交
最新的提交的提交 ID 为 3884eab839af1e82c44267484cf2945a766081f3
。在检出较旧的提交后,可使用此提交 ID 返回到最新的提交。
git checkout
的格式
Caroline 为检出“Revert controls”提交而键入的命令是 git checkout b0678b161fcf74467ed3a63110557e3d6229cfa6
。
输入Commit ID
如果输入提交 ID 的前四个或更多个字符更为轻松,则你可以这样做,而不必粘贴整个 ID。
参考资料:https://classroom.udacity.com/courses/ud775/lessons/2980038599/concepts/29607789520923