1.安装Git
选择命令行,可以从Git网站下载Git的安装程序并安装。
若使用Mac,也可以使用套件管理工具MacPorts或Homebrew来安装。
工作树和索引
在Git管理下,我们将实际操作的目录称为工作树(Working Tree)。
Git使用索引(Index)来作为准备提交到数据库的区域。索引充当了工作树和数据库之间的缓冲区。
当执行提交(Commit)操作时,Git并不直接将工作树的状态保存到数据库中,而是将当前设置在索引区域的状态保存到数据库。因此,要提交文件,首先需要将文件添加到索引区域。
这种设计有几个好处。首先,通过索引区域,我们可以避免提交工作树中不必要的文件,只提交我们选择的文件。其次,我们可以将文件的部分修改内容添加到索引区域,而不是全部修改,然后进行提交。
通过这种方式,Git提供了更灵活的提交方式,使得版本控制更加精细和高效。
2.初期设定
完成Git安装后,需要设置用户名和电子邮件地址。这个设置只需要在安装Git后进行一次即可。这些信息将作为提交者信息显示在更新历史记录中。
Git的配置存储在用户本地目录的.gitconfig文件中。可以直接编辑该配置文件,或者使用config命令进行配置。
以下是一些常用的配置命令示例:
设置用户名和电子邮件地址:
arduino
$ git config --global user.name "<用户名>"
$ git config --global user.email "<电子邮件>"
启用Git的彩色显示:
scss
$ git config --global color.ui auto
您还可以为Git命令设置别名。例如,将"checkout"命令缩写为"co",然后您只需使用"co"来执行相应的命令:
csharp
$ git config --global alias.co checkout
通过这些配置命令,您可以根据个人喜好和习惯来自定义和优化Git的使用体验。
3.新建数据库
3.1 初始化数据库
您可以按照以下步骤在本地创建一个新的Git仓库,并将名为"tutorial"的空目录添加到该仓库中。
首先,在任意位置创建一个名为"tutorial"的目录:
shell
$ mkdir tutorial
然后,进入"tutorial"目录,并使用"git init"命令将其初始化为Git仓库:
shell
$ cd tutorial
$ git init
通过以上步骤,您成功地将新创建的"tutorial"目录设置为Git仓库,并开始进行版本控制。现在,您可以在该目录下进行文件操作、进行提交等Git操作了。
3.2 确认状态
请使用status命令确认工作树和索引的状态。
lua
$ git status
3.3 添加文件至索引
将文件加入到索引,要使用add命令。在指定加入索引的文件。用空格分割可以指定多个文件。
csharp
$ git add <file>..
Tips
指定参数「.」,可以把所有的文件加入到索引。
csharp
$ git add .
3.4 提交文件(commit)
已加入到索引,我们就可以提交文件了。请执行如下显示的commit命令。
ruby
$ git commit -m ""
执行commit命令之后确认状态。
ruby$ git commit -m "first commit"
从status响应我们可以看到没有新的变更要提交。
3.5 查看记录
使用log命令,我们可以在数据库的提交记录看到新的提交。
shell
$ git log
4.push到远程数据库
向远程数据库推送本地数据库的修改记录
4.1 给数据库起别名
给远程数据库取一个别名。这样,下次推送的时候就不需要输入长串的远程数据库地址了。
请使用remote指令添加远程数据库。在处输入远程数据库名称,在处指定远程数据库的URL。
xml
$ git remote add <name> <url>
eg.
csharp$ git remote add origin https://XXX.git
执行推送或者拉取的时候,若省略了远程数据库的名称,则默认使用名为"origin"的远程数据库。因此一般都会把远程数据库命名为origin。
4.2 push到远程数据库
xml
$ git push <repository> <refspec>...
运行push可向远程数据库'origin'进行推送。
- 当执行命令时,如果指定了-u选项,那么下一次推送时就可以省略分支名称。
- 注意:首次运行指令向空的远程数据库推送时,必须指定远程数据库名称和分支名称。
perl
$ git push -u origin master
5.clone克隆远程数据库
使用clone指令可以复制数据库,在指定远程数据库的URL,在指定新目录的名称。
shell
$ git clone <repository> <directory>
执行以下指令后,会在目录(tutorial2) 复制远程数据库。
php$ git clone https://XXX.git tutorial2
6.从克隆的数据库进行push
修改后的文件进行推送,更新远程数据库。当在克隆的数据库目录执行推送时,可以省略数据库和分支名称。
perl
$ git push
7.从远程数据库pull
要将远程数据库的内容更新到本地数据库,您可以执行拉取(Pull)操作。这将从远程数据库下载最新的变更日志,并将其应用到本地数据库相应的内容上。
在我们的例子中,我们要将之前从"tutorial2"推送到远程数据库的内容拉取到本地数据库目录"tutorial"中。
使用"git pull"命令进行拉取操作。如果省略数据库名称,则默认使用名为"origin"的数据库进行拉取。
xml
$ git pull <repository> <refspec>...
以下是针对"tutorial"数据库的操作,请执行以下命令:
ruby
$ git pull origin master
执行上述命令后,Git将从远程数据库的"origin"数据库中拉取最新内容并应用到"master"分支上。
您可以使用"log"命令来确认历史记录是否已更新:
shell
$ git log
通过执行这些命令,您可以将远程数据库的最新变更同步到本地数据库,并查看更新后的历史记录。
8.合并修改记录
在执行拉取(Pull)操作后,如果其他人已经向远程数据库推送了内容,那么在下一次推送(Push)之前,您的推送将被拒绝。
这种情况下,您的推送将被拒绝,直到您读取并合并其他人推送的变更内容。如果您试图覆盖已有的变更记录而不进行合并,那么其他人推送的变更将会丢失。
Git在合并操作时会自动尝试合并已有的变更点。然而,也存在无法自动合并的情况,这时需要手动进行合并操作。
因此,在进行推送之前,务必先拉取远程数据库中的最新变更,并进行合并操作以确保您的推送能够包含其他人的变更内容。这样可以避免冲突和数据丢失,保持数据库的一致性。
==分割线上方是本地数据库的内容,下方是远程数据库的编辑内容。
再次重复add,commit操作。
用log命令来确认数据库的历史记录是否准确。指定--graph选项,能以文本形式显示更新记录的流程图。指定--oneline选项,能在一行中显示提交的信息。
css
$ git log --graph --oneline
分支 (branch)
在软件开发过程中,多人可能同时负责开发新功能或修复Bug。此外,可能会存在多个版本的软件发布,并需要对这些版本进行维护。
幸运的是,Git的分支功能可以支持同时进行多个功能的开发和版本管理。
分支是为了将修改记录的整体流程分开保存而创建的。一旦分支创建,它就独立于其他分支,因此可以在同一个数据库中同时进行多个修改。分支之间可以进行合并操作,将不同分支上的修改合并到一起。
通过使用分支,团队成员可以并行开发不同的功能或修复不同的Bug,每个分支都是相互独立的。这样可以提高开发效率,并能更好地管理不同版本的软件。
当某个功能或Bug修复完成后,可以将其分支合并回主分支或其他适当的分支,以将修改集成到主要代码库中。
Git的分支功能为团队协作和版本管理提供了强大的支持,使得软件开发过程更加灵活和高效。
master分支
在数据库进行最初的提交后, Git会创建一个名为master的分支。因此之后的提交,在切换分支之前都会添加到master分支里。
应用分支
合并分支(Merge)
合并分支是为了能够随时发布发布版本而创建的分支,它还可以作为Topic分支的源分支。保持分支的稳定状态非常重要。如果需要进行更改,通常会先创建一个Topic分支,并使用CI工具(如Jenkins)对该分支进行自动构建和测试。
通常,大家将主分支(master)作为合并分支使用。
Topic分支
Topic分支是为了开发新功能或修复Bug等任务而创建的分支。如果需要同时进行多个任务,可以创建多个Topic分支。
Topic分支是从稳定的合并分支创建的。完成任务后,需要将Topic分支合并回合并分支。
分支切换
要切换到不同的工作分支,可以使用checkout命令。checkout操作会将工作树中向目标分支提交的修改内容还原回去。切换后的提交记录将会追加到目标分支上。
HEAD
HEAD指向当前正在使用的分支的最新提交。通常,默认情况下它指向主分支(master)的最新提交。通过移动HEAD,可以切换使用不同的分支。
存储(stash)
当切换到其他分支时,如果有未提交的修改或新增的文件仍保留在索引区域或工作树中,那么这些修改内容将会从原分支移动到目标分支。
但是,如果目标分支中的相同文件也有修改,切换操作将会失败。此时,您可以选择先提交修改内容,或者使用stash暂存修改内容,然后再进行切换。
stash是一个临时保存文件修改内容的区域。您可以使用stash暂存工作树和索引中尚未提交的修改内容,然后可以在以后将这些暂存的修改应用到原分支或其他分支上。