Git 是一个开源的分布式版本控制系统,用于管理一个或多个文件的整个历史记录。它有助于跟踪文件的变化,同时让多个开发者对同一个文件做出更改,并帮助开发者们在不同时间点进行历史查阅和版本比较。
Git 拥有一个独特的理念,即分布式版本控制系统。它采用客户端-服务器模式,将文件、数据和代码以分布式仓库的形式保存在不同的服务器上,以便用户进行版本控制、代码管理和共享。Git 的分布式版本控制系统可以更快地处理版本控制任务,比传统的集中式版本控制系统更安全、更可靠、更高效。
Git 和 SVN 都是版本控制系统,用来管理软件开发过程中的源代码。它们具有一些相似的功能,但是也有一些显著的不同。
Git 是分布式版本控制系统,每个人都可以拥有 Git 仓库的完整拷贝,可以将代码更改推送给其他人,而不用依赖中央服务器。这使得 Git 具有更强大的灵活性,尤其是对于跨越多个组织的团队来说,它可以更快地提交和合并代码。
Git 具有更快的性能,因为它包含一个高效的文件夹索引系统,只跟踪文件本身的变化,而不是整个文件夹。Git 还支持分支,可以轻松地创建许多不同的分支,并利用它们来实现快速发布和实验。
SVN 是集中式版本控制系统,它的工作流程需要一个中央服务器来存储所有的文件及其更改。这使得 SVN 在管理大型团队的源代码时比较方便,因为它提供了一个共享的仓库,每个人都可以从中获取最新的代码。SVN 的另一个优点是,它支持自动合并所有变更,这样可以很容易地将多个开发者的更改合并到一起,而不会出现冲突。另外,SVN 可以跨多个操作系统使用,可以管理任何文件类型。
总的来说,Git 和 SVN 都是强大的版本控制系统,但各有优势。Git 更适合多个组织的团队,以及需要快速发布和实验的项目,而 SVN 则更适合大型团队,并且可以跨多个操作系统使用。
目前从应用和发展的广度来说,Git已经渐渐地在取代SVN的市场份额,所以可以说Git是必学的。
想要使用Git需要先掌握Git的一些基础概念,更好地理解Git。
可以用下面的图来更好地理解这三个概念之间的关系:
git add git commit
工作区 --------------> 暂存区 --------------> 仓库
简单来说,我们在工作区中修改代码后,通过 git add
命令将修改的文件添加到暂存区,然后通过 git commit
命令将暂存区中的修改记录提交到仓库中。在提交之前,我们可以通过 git status
命令来查看工作区和暂存区的状态,以及哪些文件被修改过、添加到了暂存区等信息。
git init
命令在本地创建一个新的 Git 仓库。git add
命令将修改后的文件添加到 Git 的暂存区中。git commit
命令提交修改记录到 Git 仓库中。每次提交需要添加一条注释,简要描述修改了哪些内容。git branch
命令创建一个新的分支,并切换到该分支。这个分支可以用于开发新的功能或修复错误,不会影响主分支(通常为 master
)的代码。git merge
命令将分支合并到主分支上。git pull
命令将远程仓库中的代码更新到本地仓库中。git push
命令将本地仓库中的代码更新到远程仓库中。git tag
命令创建一个新的标签,用于标记当前的版本号。Git 是一个强大的版本控制工具,提供了众多命令来管理代码仓库,以下是一些常用的 Git 命令介绍:
git init
:初始化一个新的 Git 仓库。git add
:将文件或目录添加到 Git 的暂存区中。git commit
:将暂存区的修改记录提交到 Git 仓库中。git clone
:从远程 Git 仓库中克隆一个副本到本地。git status
:查看当前 Git 仓库的状态,包括哪些文件被修改过、添加到了暂存区等信息。git log
:查看 Git 仓库中的提交历史记录,包括每个提交的作者、时间、注释等信息。git branch
:查看 Git 仓库中的分支信息,并可以创建、删除、重命名等操作。git merge
:将一个分支的修改合并到当前分支中。git pull
:从远程 Git 仓库中拉取最新的代码到本地仓库中。git push
:将本地 Git 仓库中的修改推送到远程 Git 仓库中。git checkout
:切换到指定分支或提交。git tag
:为当前的提交打上一个标签,用于标识当前版本。git remote
:管理与远程仓库的连接,可以添加、删除、重命名等操作。git diff
:查看当前修改和之前提交的版本之间的差异。这些命令只是 Git 提供的众多命令中的一部分,可以根据具体需求进行选择和使用。同时,可以通过 git --help
命令查看 Git 的帮助文档,以获得更多的信息和帮助。
在Git中,有三个主要的概念:工作区、暂存区和仓库。它们分别代表了不同的状态,可以通过Git命令进行变化。
git add
命令时,修改的文件会被添加到暂存区,此时这些文件的状态为“已暂存”。git commit
命令时,暂存区中的文件会被提交到仓库中,此时这些文件的状态为“已提交”。下面是这些状态如何相互转换的说明:
git add
,此时文件的状态由“未跟踪”或“已修改”变为“已暂存”;git commit -m "commit message"
,此时文件的状态由“已暂存”变为“已提交”;git status
,此命令可以查看工作区、暂存区和仓库中文件的状态;git reset
,此命令可以将暂存区的文件恢复为未暂存的状态;git checkout --
,此命令可以将工作区的文件恢复到上次提交的状态;git checkout
,此命令可以将指定提交中的文件恢复到当前分支上。需要注意的是,上述命令在执行时需要指定对应的文件或提交。同时,这些命令还有更多的选项和参数可以使用,可以通过git help
命令来查看Git的文档。
Windows和Mac下都有直接图形界面的安装方式,非常简单,不再赘述,主要讲讲Linux下的安装方式。
在Linux下安装Git需要先安装必要的依赖:
Centos/RedHat
$ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
Debian/Ubuntu
$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev
下载最新版Git进行安装
$ tar -zxf git-2.39.2.tar.gz
$ cd git-2.39.2
$ make prefix=/usr/local all
$ sudo make prefix=/usr/local install
git提供了git config
命令用于配置或读取相应的工作环境变量,其主要配置文件分为三层,从上到下分别是:
/etc/gitconfig
文件:系统中对所有用户都普遍适用的配置。若使用 git config
时用 --system
选项,读写的就是这个文件。~/.gitconfig
文件:用户目录下的配置文件只适用于该用户。若使用 git config
时用 --global
选项,读写的就是这个文件。.git/config
文件:仅针对当前项目有效,.git/config
里的配置会覆盖 /etc/gitconfig
中的同名变量。最重要的配置就是配置用户名和电子邮件,使用以下命令即可:
$ git config --global user.name "lucas"
$ git config --global user.email lucas@foxmail.com
如果想要查看已有配置信息,可以使用以下命令:
$ git config --list
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=D:/install/Git/mingw64/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
pull.rebase=false
credential.helper=manager-core
credential.https://dev.azure.com.usehttppath=true
init.defaultbranch=master
user.name=lucas
user.email=lucas@foxmail.com
......
在使用 Git 管理代码仓库时,有些文件或目录不应该被 Git 进行版本控制,例如编译输出文件、日志文件等。这时可以使用 .gitignore
文件来告诉 Git 忽略这些文件或目录。
.gitignore
文件是一个文本文件,列出了 Git 应该忽略的文件或目录的规则。每一行规则都是一个模式,可以包含通配符、反斜线等符号,表示需要忽略的文件或目录的名称或路径。例如:
# 忽略所有 .txt 文件
*.txt
# 忽略 build 目录及其下的所有内容
/build/
# 忽略指定的文件
example.log
在上述例子中,第一行规则使用了通配符 *
来匹配所有 .txt
结尾的文件;第二行规则使用了反斜线 /
来指定需要忽略的目录 build
,并在末尾加上了斜线 /
来表示忽略该目录下的所有内容;第三行规则指定了需要忽略的文件名 example.log
。
.gitignore
文件可以放置在代码仓库的任何级别上,从仓库根目录到任意子目录都可以。一般建议将其放置在代码仓库的根目录下,以便更方便地管理和维护。
需要注意的是,如果在 .gitignore
文件中忽略了某个文件或目录,那么 Git 将不会对其进行版本控制,也不会将其包含在提交中,因此需要确保 .gitignore
文件中的规则正确地列出了需要忽略的文件或目录。
git diff
是一个常用的 Git 命令,用于比较 Git 仓库中的不同版本之间的差异。它可以用于比较两个提交之间的差异,或比较工作目录中的文件与暂存区或最新提交之间的差异。
下面是 git diff
命令的一些常见用法:
git diff
git diff --cached
git diff <commit1> <commit2>
其中 <commit1>
和 <commit2>
分别是要比较的两个提交的 SHA-1 标识符,可以使用提交的短标识符或分支名代替。
git diff <commit1> <commit2> <file>
其中 <file>
可以是文件或目录的路径,可以只比较某个文件或目录的差异。
git diff <branch1>..<branch2>
其中 <branch1>
和 <branch2>
分别是要比较的两个分支的名称,可以使用分支的短名称或完整名称代替。
以上是 git diff
命令的一些常见用法,使用这些命令可以帮助开发者比较不同版本之间的差异,从而更好地管理代码仓库。
在多人协作开发时,经常会出现代码冲突的情况。当两个或多个开发者同时修改同一个文件的同一部分时,就会发生冲突。Git 提供了一些命令和工具来帮助开发者处理代码冲突,下面是处理代码冲突的一般步骤:
在处理代码冲突之前,需要先更新本地代码库。使用 git pull
命令从远程仓库获取最新的代码。
在更新代码库之后,如果有冲突,使用 git status
命令查看冲突文件的状态,冲突文件的状态为 both modified
。
手动编辑冲突文件,将冲突部分保留下来,删除其他部分。可以使用编辑器或其他工具来帮助解决冲突。
在解决冲突之后,使用 git add
命令将解决后的文件添加到暂存区。
在将解决后的文件添加到暂存区后,使用 git commit
命令提交修改。
如果在解决冲突的过程中遇到问题或错误,可以使用 git merge --abort
命令取消合并操作,返回到合并前的状态。
需要注意的是,在多人协作开发时,最好避免同时修改同一个文件的同一部分,可以通过拆分任务、分工协作等方式来避免冲突的发生。此外,在处理冲突时,需要保持沟通和协作,及时解决问题。
Git merge是将两个或多个分支的代码合并到一个分支中的操作。在合并过程中,Git会自动尝试将两个分支的代码进行比较和合并,以生成一个新的合并提交。
以下是使用Git merge合并代码的一些步骤:
git checkout master
git merge
git push
命令将合并的代码推送到远程仓库。注意:在进行合并操作之前,建议先从远程仓库获取最新的代码并将其合并到本地分支。这样可以避免不必要的冲突和合并问题。
在Git中,可以使用多种方法回退代码,包括撤销工作区的修改、恢复指定版本的代码等。下面介绍一些常用的回退代码的方法:
git checkout --
,此命令可以将工作区的文件恢复到上次提交的状态。如果你已经使用git add
将修改的文件添加到暂存区,但还没有提交,可以使用git reset HEAD
来撤销暂存区的修改。git checkout
,此命令可以将指定提交中的文件恢复到当前分支上。你可以使用git log
命令来查看提交历史记录,并选择需要恢复的版本。如果你想恢复到某个历史提交的状态,可以使用git checkout
命令,这将使得HEAD指向这个提交,并将工作区和暂存区都恢复到这个提交的状态。git revert
,此命令可以创建一个新的提交,用于撤销指定提交的更改。该命令将会生成一个新的提交,包含了回退操作的更改,但是不会删除原始提交。如果你需要完全删除某个提交,可以使用git reset
命令,但是需要注意,这将会删除该提交及其之后的提交,因此需要谨慎使用。需要注意的是,在使用Git回退代码时,需要注意不要将未提交的修改丢失,并且需要保留历史提交记录。如果你不确定该如何回退代码,可以先创建一个新的分支,进行实验,确保不会对主分支造成不可逆的影响。
Git GUI工具是一种可以通过图形界面操作Git的工具,它可以帮助用户更轻松地管理Git仓库、提交代码、查看历史记录等操作。下面是一些常用的Git GUI工具:
以上是一些常用的Git GUI工具,它们都提供了一套直观的图形界面,可以帮助用户更方便地管理Git仓库、提交代码等操作。不同的Git GUI工具有不同的特点和优缺点,用户可以根据自己的需要选择合适的工具。
在 GitHub 上创建一个账户并登录。
找到要贡献代码的项目,并在项目主页上点击 “Fork” 按钮,将项目复制到自己的账户下。
在自己的电脑上安装 Git 工具。
使用 Git 将项目克隆到本地计算机中。可以通过在命令行终端中使用以下命令来克隆项目:
bashCopy code
git clone https://github.com/你的用户名/项目名.git
在本地修改代码,并使用以下命令将更改提交到本地 Git 仓库:
sqlCopy codegit add .
git commit -m "提交信息"
其中,git add .
命令将所有修改添加到暂存区,git commit
命令将提交更改,并在提交信息中描述更改。
将本地更改推送到自己的 GitHub 账户中:
perlCopy code
git push origin master
这将把本地的更改推送到 GitHub 上。
在自己的 GitHub 账户上打开一个 Pull Request (PR) 请求,请求将更改合并到原始项目中。在 GitHub 上点击 “New pull request” 按钮,填写 PR 请求的标题和描述,并选择要合并的分支。
等待原始项目的维护者审核并接受你的 PR 请求。如果需要进一步修改,原始项目的维护者可以在 PR 请求中提出评论和建议。
当 PR 请求被接受并合并到原始项目后,你的代码贡献就完成了。
以上是在 GitHub 上贡献代码的基本步骤。在此过程中,你需要注意遵循项目的代码风格和贡献规范,避免与其他贡献者冲突,以便顺利地将你的代码贡献到项目中。
掌握以上知识,一般的Git操作完全不在话下!还等啥,行动吧。