![IT审计:用SQL+Python提升工作效率](https://wfqqreader-1252317822.image.myqcloud.com/cover/644/44819644/b_44819644.jpg)
1.3 Git
你是如何管理文档的?很多人对于文件的管理是非常混乱的,尤其是当多个人协作的时候,经常发现别人发给自己的文档居然是在之前的版本上修改的,这让人十分头疼。管理稍微好一点的人,可能会给不同版本的文件名上加上类似V1、V2这样的版本信息以做区分,但时间一长就会发现自己的文件夹里存了大量不同后缀的文件。
如果有一个工具能够记录一个文档的不同版本,那么就不用担心把文件弄混了,并且可以方便地回退到各个历史版本中去。更重要的是和他人协作的时候,能够保证其是在最新的版本基础上修改的。那么有具有这样功能的工具吗?答案是有的,如Git。
在学习过程中如果你有任何操作上的问题,可以查看Pro Git(中文版),文档里有对Git的详细介绍。学会看文档也是我们在学习编程过程中必不可少的技能。
安装
Windows用户
在Git官方网站找到下载页面,选择对应操作系统的版本进行下载,如图1-3-1所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_22_1.jpg?sign=1739905774-N9AAITYRZ7NttQCWqMTB1nUkPr0SDfet-0-530eb183b1f21ce96476b52a7b8f4598)
图1-3-1
在安装过程中单击“Next”按钮,即可采用默认配置。安装完成后在Windows“开始”菜单里会增加一个“Git”文件夹,如图1-3-2所示。选择“Git Bash”选项,打开命令终端,之后对版本控制的操作就需要在这个终端中进行,如图1-3-3所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_22_2.jpg?sign=1739905774-8026uAsUhV1rlFRTenEpEvvvtbY6vPZe-0-5be8fda5cfa3518952e090d6ccfb2f67)
图1-3-2
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_22_3.jpg?sign=1739905774-4sUCH7icvq6RkUpUMDx5USpqDFVV9cAY-0-d93b88f79e686006937c45804c7cc65f)
图1-3-3
Ubuntu用户
对于Ubuntu系统的用户,可以不用上述安装过程,直接在命令终端里运行命令即可:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_22_4.jpg?sign=1739905774-vEdwIRkc9fN4wLOnZqZF49SEWoGLc0v8-0-fdf84dba22c7d0f7d9d517e11dd4ecfa)
Mac用户
Mac和Ubuntu都是类Unix系统,都可以在命令终端里用命令安装:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_23_1.jpg?sign=1739905774-r0V0kg4RSoZcSK09hMbkbeJ265hSIbET-0-90f56f385e1177c95b9336569bc0cee2)
建立Git仓库
安装好Git后,如果想对本地计算机中的一个文件夹进行版本控制,那么需要怎么做呢?
很简单,从命令终端(Windows中为Git Bash)打开需要进行版本控制的文件夹,执行:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_23_2.jpg?sign=1739905774-6Twnz9964k4f8DoY6ONdXMUKsDmCfDJr-0-cf149bac090898894732183a733fd411)
平时用Windows的人可能不清楚如何从命令终端打开某个文件夹,例如,在计算机D盘下有一个名为IT的文件夹,那么要打开这个文件夹可执行:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_23_3.jpg?sign=1739905774-v8LMTV3he2GewfCN923MYevFpSR63ksf-0-bbffecf9b5bbf36d9787973dcd364ace)
这里的cd命令就是切换目录。如果文件夹路径比较长,记不住怎么办?可以通过使用cd命令,再使用ls命令查看当前文件目录下有哪些文件,再使用cd命令切换到需要的目录,如图1-3-4所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_23_4.jpg?sign=1739905774-sWk4BICCFzDUOdPnVg814u22TCzKU3op-0-59a694916b96d83a6bb9aecb3bb8d6eb)
图1-3-4
注意,输入路径时可以使用Tab键补全。
当执行git init进行初始化后,就会在当前文件夹下出现一个扩展名为“.git”的隐藏文件夹,用来存储版本控制的数据和资源。当然,我们现在还不会对当前文件夹下的文件进行跟踪和版本控制,只能先进行结构化框架的初始化。下面执行:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_24_1.jpg?sign=1739905774-qnQdXuKTh1KenY37GSwrXmqj1sBL31MH-0-402d8864b15bfa12576e1cd6ac24a6d0)
这个命令是使用最频繁的命令之一,作用是检查文件状态,简单理解就是通过该命令可以查看系统是否有记录文件修改,以及修改是否有提交。只有系统进行了记录,将来如果我们想回退到某个之前的版本时才有可能进行操作。
为了演示方便,这里新建了一个audit.txt文件,该文件中只有一行字符串“this is an initialtext”。执行git status后,显示audit.txt未被跟踪,如图1-3-5所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_24_2.jpg?sign=1739905774-d3Hzg7vYizgTLUW338XUpbqJH68CXHkH-0-78742cfacbf8276dc094ca3a4e3388c2)
图1-3-5
如果要将该文件纳入版本控制,那么需要使用git add命令跟踪这些文件,执行:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_24_3.jpg?sign=1739905774-UBdoqPWthjaMDI8PnH9mIpAAR56ZWNhJ-0-e67ae4e34c9ea8427847bd1d1789370a)
这里可以用git add添加当前文件夹下的所有文件,或者只添加一个文件如git add audit.txt。添加完成后,再执行git status,如图1-3-6所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_24_4.jpg?sign=1739905774-GbGHBvIsFVa6htJmlgvwLcVkRHuNKpFV-0-e4d7e32c1c3a67e6685f26c9f730b095)
图1-3-6
系统提示“changes to be committed”,意思是对修改进行了提交,并且对需要提交的文件进行了列示。可能第一次接触Git的人会有疑惑,刚刚不是已经用git add 对文件进行添加并跟踪了吗?怎么还需要提交?
这就需要说明一下Git有一个暂存区(staged)的概念,使用git add 只是将文件的修改记录到了暂存区里。在文档的编写过程中,可能会有多次修改,通过git add 可以跟踪到每一次修改并添加到暂存区,而最后需要再做一次提交。执行:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_25_1.jpg?sign=1739905774-aD4iB2ivRMAHjb5qnad9euK8C9zm2tKP-0-66fe8915e26f2f5a6afe6b8dec2ddf2e)
这里的“提交描述”是对本次提交版本的说明,以便之后进行识别。在执行git commit后,并没有提交成功,系统反馈是“please tell me who you are.”,如图1-3-7所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_25_2.jpg?sign=1739905774-snQ8TDvQPYbDb41MpNWxhYxBtetw46Ow-0-81d00718729e54d6d3e79c9bd62bf57c)
图1-3-7
执行下面两条语句:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_25_3.jpg?sign=1739905774-UoR3uyRwdv1kWe0BCjOvYLuCABpDw5f1-0-181d3040f0afcafeb290c3e9b7aefc92)
设置邮箱和用户名,以此作为身份标识。如图1-3-8所示,在设置后,再执行git commit就能正常完成提交了。用git status查看状态,可以发现设置成功。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_26_1.jpg?sign=1739905774-hyY03JHLDtxBXyY0LM8ci16q6oeHdMNl-0-d71d5d6a3d8a0a263a515a3cf442f548)
图1-3-8
有时候一些文件并不想用Git记录,比如一些临时生成的“.pdf”“.exe”等文件,并且不想每次git status的时候系统弹出提示信息,那么此时可以在文件夹中新建一个“.gitignore”文件。这个文件的作用就是记录不想跟踪的文件。可以用文本编辑器打开:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_26_2.jpg?sign=1739905774-YBrC0F0uuDIlcuzxTclL80N71s11sO7F-0-7d3adc2e49e08a137e2d368a7d7c2f82)
写上不想跟踪的文件后进行保存。
以上是对本地已有的工作目录创建仓库,还有一个创建的方式是对已有仓库克隆,命令如下:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_26_3.jpg?sign=1739905774-DaO0gpgkhepazzdPc7nc70kREyuZ9Rtw-0-0a66aec27d83572783f3c63637f47258)
由于本书的附件资源在gitee上建立了远程仓库,因此也可以使用克隆的方式将远程仓库复制到本地。在gitee网站上任何一个项目都可以找到克隆的网址,如图1-3-9所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_26_4.jpg?sign=1739905774-eoO31sh0SOJQ0ubBTvDimVMQZCNEwWae-0-35aec73528675bbd2f38a06f6fd6dd06)
图1-3-9
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_27_1.jpg?sign=1739905774-P9PvSxpSty3rMVFoIwx3IrrbWWy0xPsN-0-acad625987e6cbe67bf67b1ae543f646)
使用git clone命令完成克隆后,就可以在本地学习、修改、运行代码了。
记录文件修改
显示更改信息
对于每一次文件的修改更新都可以用git add 添加到暂存区,再用git commit 完成提交。这两个命令是最简单和常用的,下面介绍在文件修改过程中可能会用到的命令。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_27_2.jpg?sign=1739905774-0oCuAwMtc1uNmoUsqcerqxey8SB0dnvg-0-21a35e8696fdb974d47ad6dcc69aaaf7)
git diff 用来查看修改后与已存入暂存区的版本的差异。在创建的仓库中audit.txt添加一行文字“第二行文档”,再执行git diff命令,如图1-3-10所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_27_3.jpg?sign=1739905774-RQdyxOe1ZcDROBQWJ8qqAaPc31l10Al5-0-c0f2239e3e702c7f175ede4d5c3516c3)
图1-3-10
如果使用的时候有中文乱码,那么通过执行以下命令,修改core.quotepath参数即可:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_27_4.jpg?sign=1739905774-ZWPbtjlIBUYVqrH9dDim9Z4Cwog0zeWf-0-c3af4eb87380c5240546720340eac6a5)
删除文件
对于已经提交的文档,如果直接删除,那么在使用git status 的时候还是会显示出该文件。因此需要使用git rm删除该文件。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_28_1.jpg?sign=1739905774-aoKZ15nKX9XDYH1WFVZzQ8XY2gWojDgp-0-9133922d43d6f04e008151cacd3169f1)
移动文件
当我们想将某个文件移动到仓库中的路径的时候,需要使用git mv命令,当然修改文件名也是用这条命令。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_28_2.jpg?sign=1739905774-y59Ae9x2TjHiyONLy2YSo6nbGYap9JD3-0-f8bb07cd54de6b783aae09706c65c07d)
对于文件的新增、修改、删除的操作我们都已经掌握了,那么在写文档的时候,如果想保留以前的修改,该怎么回退到以前的版本呢?由于Git的文件分为未记录到暂存区、已记录到暂存区、已提交3种状态,因此我们需要掌握这3种状态下的版本回退。
未记录到暂存区
我们已经在“audit.txt”里添加了一行记录并用git diff查看了修改的差异,但还没有用git add记录到暂存区。如果想放弃修改,那么要先用git status查看文档状态。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_28_3.jpg?sign=1739905774-B1xwPCX4VW03jtx8PKJCF93e0c40RJDk-0-c4a23644103b29bba8d2d36b27d48014)
这里可以看到系统提示使用git restore放弃修改。通过执行:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_28_4.jpg?sign=1739905774-Z8fRm6ZJB9dAktgcGQ4PSx5tqkM9Aizz-0-b9b2458942f81aec47f27e5522571bc4)
回退到修改前的版本。注意,有些Git版本是使用git checkout 文件名来放弃修改的,具体看系统提示。
已记录到暂存区
在audit.txt文档中添加一行记录并使用git add将其添加到暂存区,执行git status:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_28_5.jpg?sign=1739905774-JihGXOdTwYDl2cibqRVK3ZXvGfltwyfg-0-0f3bac4e15f304dd5f71171f428536c5)
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_29_1.jpg?sign=1739905774-LhUqXaBQ97xTKEwX7stZXdVMrVML9fLZ-0-a8d200945246aab8717abd1d20cdc8ca)
可以看到系统提示使用git restore--staged <file>以放弃将记录添加到暂存区。由此也可以看出,并不需要一开始记住那么多命令,跟着系统提示操作即可。
已提交
当提交次数过多的时候,则可以使用git log查看历史提交的版本:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_29_2.jpg?sign=1739905774-Gte4OqiRfz3DVmwcQwaxV69BYnl88i1v-0-0072c5e4ff000539e081a3dd323eca07)
可以看到现在仓库里有两个版本,包含了SHA-1值、作者、日期、commit描述信息。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_29_3.jpg?sign=1739905774-FJcvwsEofYEJw3KEDlSaSUVZnH85fQak-0-04d537125f50dcf3a43dfd1bec389e28)
当commit多次后,如果直接使用git log,那么展示的历史信息就会很冗长,为了限制查看的版本数,可以使用命令:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_29_4.jpg?sign=1739905774-mjY68Z5KPC28gWF5efu8DeJdSyPTXRid-0-b7c0d152bdb4ab0f62c9b01cf0eae5cf)
显示最近两个版本,当然数字可以修改。如果在显示版本时,还想看每个版本具体做了哪些修改,那么可以使用命令:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_29_5.jpg?sign=1739905774-tk0JFAsKzQaLnz7cPgeZGaF3o4mujqjl-0-7cf977900924322ae9467378608d0d19)
-p参数能够显示每个版本的具体修改内容。
除此之外,git log还有很多参数可以选择,感兴趣的人可以使用git log--help查看。这里推荐使用:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_30_1.jpg?sign=1739905774-EvL7hVbrymgTcES0SZDkLuMDNAKUZQdX-0-bb14f9a63b1f9b821cace38cf90a1203)
● all表示同时显示所有分支的记录。
● graph表示以图形化展示版本记录。可以方便地看出分支的合并情况。
● decorate表示美化显示。
● oneline表示每条版本记录只显示一条关键信息。
显示效果如下所示:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_30_2.jpg?sign=1739905774-h9r9amaNo0npkDNzOhClt89CIxjZiC4M-0-decf3cba0f3af0092d9da2b35ecdce96)
接着刚才回退的话题,如果想回退到“init my document”这个版本,那么可以使用命令:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_30_3.jpg?sign=1739905774-FCtZodLDjKPp9aIIaxOfY9EYOCY3jUCm-0-e48389523123971f1a6ca314f2480ff9)
这里的SHA-1值就是执行git log的时候显示的字符串。比如想回退到最初始的版本,那么就执行:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_30_4.jpg?sign=1739905774-V49r6h55W1b09WZdE87AgT5Unx7jiQs5-0-d0d2378c354aef0f5a756e12a1047c08)
这里的SHA-1值不需要输入完整,输入前面几个字符就可以,如“6e8e”。这个时候已经回退到了初始的版本。如果只有一个文件需要回退到之前的历史版本,对其他文件的修改还想保留,那么可以进行如下操作:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_30_5.jpg?sign=1739905774-BmrsgrIJeDv5VQY9L9nHnfDen4CZ4FhA-0-467b3ca9a001c1853c499b73f8b66d20)
如果又想恢复到之前的版本怎么办?可以使用git reflog查看引用日志。当你在工作时,Git会在后台保存一个引用日志(reflog),引用日志记录了最近几个月的 HEAD 和分支引用所指向的历史。执行以下命令:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_31_1.jpg?sign=1739905774-PYIBkirwCiDt2m7ZxvF3NII59G6yVbX8-0-363b1c1ee30b0de6aeba77e9acc0c42f)
这里可以看到回退前的版本SHA-1值为d6a60f8,继续使用git reset命令回到回退前的版本。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_31_2.jpg?sign=1739905774-Dk1USkO8InfUQZVk3QCVVaLw66PxkIm1-0-7c5d4626bc8fa86170e0f7bafa79d2c1)
分支的使用
有时候需要对文档进行较大幅度的修改,甚至是尝试一条新创作方向,但是最终是否成功我们并不知道。如果把之前的创作比作主路的话,那么再创建一个分支就是尝试新的道路。如果失败了,还能重新切换到主路去。创建了一个“dev”分支。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_31_3.jpg?sign=1739905774-k2ql1tAWHTuyT36c2OanBFtcxlDRj9w3-0-087008f912b07f778f190be69a28e281)
使用git branch查看当前所有分支:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_31_4.jpg?sign=1739905774-SXHAGBeITXBXdR8GdOtzYHhImO7EQ9Ql-0-c013b42cf164ded874dfcd50e9802330)
可以看到显示出了两个分支master和dev,前面的星号代表现在还停留在master分支上。如果要切换到dev分支,则可以用命令:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_31_5.jpg?sign=1739905774-yuSSkTuwrDRQsEjo3uwRikiNKpSV2nHH-0-eb4453d5fd1757f7f70c16739e95fa95)
当然可以使用git checkout-b命令将创建分支、合并分支两个步骤在一条命令中执行完:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_31_6.jpg?sign=1739905774-VdjOT1rfPsrQ3i2zx1GUhF32rHkhSDpd-0-91198177f409a4ef1f89a4b9371640db)
比如新建一个tax.txt文档后进行添加、提交。于是在dev分支下就有了3个文件:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_31_7.jpg?sign=1739905774-ED9oFZeQmfoRbM2nwx6cqrOrS2Utmn3P-0-d2bfe3876b760a62f86cc7077de069a2)
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_32_1.jpg?sign=1739905774-npBCufMLOGyRnJZ8IStIq7l2Zg6yML3I-0-22d14aae73626db367b45fe971b4121c)
切换回master分支:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_32_2.jpg?sign=1739905774-CfPevLdh7WNuUONCj1dM4dBB8wl9tmk4-0-b773e97d0e369d5fbe462c0481417410)
用ls可以看到本地只有两个文件,这说明master和dev分支是完全独立的,我们再也不需要像以前那样先复制整个文件夹再进行修改了,并且不用担心弄混文档。假如要将dev分支的修改合并到master分支上,那么只需要使用git checkout master,再使用git merge dev合并dev分支:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_32_3.jpg?sign=1739905774-N0BXuC5DndVxCuyJFlYMOUuGK4a4KrCH-0-62f6a2757852b3dba42df9f5add6e168)
合并成功后,dev分支的修改就都保存在了master分支上了。如果不再需要dev分支,那么可以使用git branch-d命令进行删除:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_32_4.jpg?sign=1739905774-8x8HXHO0cb79pZ8RWMvXyHPF7MwYBwDt-0-b919352b9455cc8647e3cbc8535819c0)
对于分支的使用,初学者掌握到这里就差不多了,如果有更多需求,可以查看Pro Git文档。
添加远程仓库
前面所有的操作过程都是在本地计算机完成的,也就是说我们使用Git进行版本控制时可以不需要网络。但是如果有多台工作设备或者需要和他人协作,那么文档只存到本地计算机里就不行了,我们需要远程仓库。远程仓库是指托管在因特网或其他网络中的项目的版本库。而Github就是最知名的免费远程仓库了,可以将本地的版本库托管到上面。由于网络原因,这里使用国内的gitee。
注册好gitee账号后,新建一个空项目,填写好仓库名称、仓库介绍等,如图1-3-11所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_33_1.jpg?sign=1739905774-B5IJuCYDedoMwjxxjy8tKiLCDWa9yYz9-0-59f26d9352b364e81cec874a8deda3d0)
图1-3-11
创建后,网站会给你一个远程仓库的网址,以及和远程仓库连接的命令,如图1-3-12所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_33_2.jpg?sign=1739905774-PpPnG8ezeU2FZTBvgxfxqf3LS1Z7nGJk-0-c8f7ba168de3c1f71d9ae7990bd28187)
图1-3-12
添加远程仓库
将本地的IT项目添加远程仓库后,就可以使用git push命令将本地的仓库进行推送了。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_33_3.jpg?sign=1739905774-tbgzv3HK94MBgbODwMvZpaMRcoZjTPp4-0-4ab464fba84b7ceca54873a572a27b16)
推送到远程仓库
直接使用git push会报错,如图1-3-13所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_34_1.jpg?sign=1739905774-6fQlN2aN5tdzUtGu2trQZGGximCFCYk0-0-24d702abd161b50bea6e9bc23e72a7a6)
图1-3-13
由于这是一个新项目,所以提示我们使用命令:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_34_2.jpg?sign=1739905774-ZEUz84VuGoVg3L4OxGsFW3ug97qifMch-0-3575815cde6768c768d3b1f731613af1)
如果添加远程时使用的是https的网址,则会提示你输入账号、密码,然后推送成功。如果添加过程时使用的是SSH协议的网址,则会提示没有权限。因此得进行配置让远程知道谁是这个远程库的拥有者。
删除远程仓库
为了测试,先将前面添加的远程仓库的连接删除:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_34_3.jpg?sign=1739905774-TRrkmNZLHGiu29fkZSlwlcix7xQigkt3-0-e394ae906a40ffe7558687712a501796)
免密码添加远程仓库
此处只需要在前面的网址中添加上用户名和密码,这样后续的推送就不需要再输入了。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_34_4.jpg?sign=1739905774-dxCsrzGfTf5qBYpYNq5ETizAqKMd4gfZ-0-5ecff4ebab449a099103ec36dfdbec46)
输入以下命令(填写自己的信息)。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_34_5.jpg?sign=1739905774-mhqWqnxUgw9d8tBgQIiqoEiak9gsdzKC-0-a620d2f8977d851a870d296657003333)
当然,如果是一个新项目,那么可以在gitee上新建后直接使用git clone克隆下来,这是对于初学者最方便的方式。对于这种方式,可以使用SSH协议传输,不用对每个新建的项目都去建立与远程仓库的连接,并且不用每次输入密码。
可以看到远程仓库的网址是https协议的,单击SSH后,可以得到“git@gitee.com:nigo81/it.git”网址。如果使用SSH协议传输,那么就用git clone克隆这个网址。为了以后每次上传不输入用户名、密码,则需要生成一对SSH的公钥、私钥,将公钥文本设置到gitee中。
生成SSH密钥
在终端输入命令后,在提示中一直按回车键,会在C盘(C/Users/yourname/.ssh)生成.ssh文件夹,这里的yourname是当前的Windows系统用户名。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_35_1.jpg?sign=1739905774-Vojd7u42e19Zx3RducxLjccmJfVBsmnH-0-469fd86cf4d917609a5092380cab4fd2)
如果是Ubuntu系统,则路径为“~/.ssh”。文件夹里有公钥id_rsa.pub和私钥id_rsa两个文件。用记事本打开公钥id_rsa.pub复制所有文本内容。打开gitee网站上的“setting->SSH and GPG keys”,将复制的公钥文本粘贴上去,如图1-3-14所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_35_2.jpg?sign=1739905774-UxpKqPdSYQzKW3Ls0I2vu8dA2cZRHia3-0-762059bad5758e4887fb30d95c7f4492)
图1-3-14
添加完成后,gitee上有公钥,而我们的本地计算机有私钥,这样就可以安全通信了,使用git push的时候也不用再输入密码了。
推送和拉取代码
push
将本地分支推送到远程仓库对应的分支。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_36_1.jpg?sign=1739905774-MWZiF1GVtyLl1UrD8Pe8DfeY2GXLoCqt-0-2c858202ef0f9dd24caf339cd27df252)
fetch
将远程仓库拉取到本地计算机。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_36_2.jpg?sign=1739905774-qSHYRsqhqWvJP5A49YjPE7J3nDhxbJkq-0-b8556a519b9e22e1c8da71e4d41890ad)
pull
将远程仓库拉取到本地计算机并与本地版本合并。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_36_3.jpg?sign=1739905774-sLCaHS8eyRbhebuPcRSC5frL5eRGqsWE-0-491434e0a956aa27408ab3048a031020)
pull request
当克隆了别人的项目后,如有一些非常好的修改,怎么能让原项目作者采纳呢?这也是开源项目的魅力所在,所有人都可以做贡献,同时所有人都能够受益。以gitee上的项目https://gitee.com/nigo81/audit-guid为例进行说明。如图1-3-15所示,找到一个开源项目,单击“Fork”按钮。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_36_4.jpg?sign=1739905774-ZuEpiegCJ7m6m03IHZhkRJhLBh9VamWm-0-1044f8c975383d000d0e2e6d043d7922)
图1-3-15
找到Fork后的项目网址,使用git clone克隆到本地计算机,切换到dev分支(也可以使用master分支),可以帮助原作者修改一些错别字或者Bug。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_37_1.jpg?sign=1739905774-OHxovaVQXJgHbwPrt9aFUBOwRuCghKV1-0-0a845ab16410d8fc405f4445217d3c1c)
修改完成后,提交并推送修改:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_37_2.jpg?sign=1739905774-0XRynZ89jbmcCROdK4Qm1ymFpb7GRgm9-0-7f05b70ee2c0f0a080083b46d8fe10fa)
● 在自己(不是原作者)的gitee上切换到dev分支,并单击“New pull request”按钮。填写好描述信息后,单击“pull request”按钮,编辑标题并做简要描述。
● 此时你的“pull request”请求原作者就能看见了,如果原作者觉得你的修改不错,那么就会merge到他的分支上,这样大家就一起完成了一次协作。
作业:
1.Fork audit-guid项目,创建一个分支,发现并修改一些错误后提交pull request。
2.遇到问题可以查看Pro Git,或者通过搜索引擎寻找答案。