![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=1739032539-ktS0HnTDXbbiFeqItzvOj0DDeiWceLko-0-056b0ce58a2f4bfb42c6f75da86e3712)
图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=1739032539-J78lcMJRfhkNouOxgeyILCA2qc9dj9S2-0-e1bdad55a0f230cde8b56982a8c4c764)
图1-3-2
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_22_3.jpg?sign=1739032539-ZplsKPa5WKJ8rS53uOVACWArqEXGES0A-0-e890af9fc35784b48f2f6306f964574b)
图1-3-3
Ubuntu用户
对于Ubuntu系统的用户,可以不用上述安装过程,直接在命令终端里运行命令即可:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_22_4.jpg?sign=1739032539-nxZzzVjIrMWb4wUozKXgnq1sztXuYc35-0-e6be8f7a3ce35890dc2488ceefcc5337)
Mac用户
Mac和Ubuntu都是类Unix系统,都可以在命令终端里用命令安装:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_23_1.jpg?sign=1739032539-brWgyux2gi860UoSeKhlqRYNYdjtdrOO-0-1117798949dbdcbd41b86181c3513943)
建立Git仓库
安装好Git后,如果想对本地计算机中的一个文件夹进行版本控制,那么需要怎么做呢?
很简单,从命令终端(Windows中为Git Bash)打开需要进行版本控制的文件夹,执行:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_23_2.jpg?sign=1739032539-FYq4SuNTLL4Asum4wbvUj3ynScfA1xXZ-0-5d236fa45856bea6762ec6d3c86cd388)
平时用Windows的人可能不清楚如何从命令终端打开某个文件夹,例如,在计算机D盘下有一个名为IT的文件夹,那么要打开这个文件夹可执行:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_23_3.jpg?sign=1739032539-TaCljfHIlpVKtLWOzt3IwR634T3RrvCV-0-8ee2d885fbb9d22cc03ce59569e50075)
这里的cd命令就是切换目录。如果文件夹路径比较长,记不住怎么办?可以通过使用cd命令,再使用ls命令查看当前文件目录下有哪些文件,再使用cd命令切换到需要的目录,如图1-3-4所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_23_4.jpg?sign=1739032539-TcjsmOdK06jBWl1NOfJTclueqvYwr4aN-0-f13abed450f10bc27dd81a644df11cd6)
图1-3-4
注意,输入路径时可以使用Tab键补全。
当执行git init进行初始化后,就会在当前文件夹下出现一个扩展名为“.git”的隐藏文件夹,用来存储版本控制的数据和资源。当然,我们现在还不会对当前文件夹下的文件进行跟踪和版本控制,只能先进行结构化框架的初始化。下面执行:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_24_1.jpg?sign=1739032539-qbHXIHCcBVT8yTfJBJW5ckhGIIA262Pl-0-f5eb9b8690fb298af1620b883248657a)
这个命令是使用最频繁的命令之一,作用是检查文件状态,简单理解就是通过该命令可以查看系统是否有记录文件修改,以及修改是否有提交。只有系统进行了记录,将来如果我们想回退到某个之前的版本时才有可能进行操作。
为了演示方便,这里新建了一个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=1739032539-nCZvxsPkV6ptkyGVaRU9oceBgiIWiIt5-0-27862b3602eeb99f2eb2403b3d45057d)
图1-3-5
如果要将该文件纳入版本控制,那么需要使用git add命令跟踪这些文件,执行:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_24_3.jpg?sign=1739032539-ylq1VKypx3Lk8JuzaPBO65WDrR2qzGdo-0-e384ad23d8508a52d645b18da88615a7)
这里可以用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=1739032539-gHjOx6SgkhVmpGmlaMzkoRurAMVXcrLL-0-360dab351d45b7312b5266577823b7bb)
图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=1739032539-jsf0ymnmsmd3fImQWAQ5gEIqfvrtLD0b-0-61c5658a7350962134d62ce5c036609f)
这里的“提交描述”是对本次提交版本的说明,以便之后进行识别。在执行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=1739032539-yriC6jNMPJ9Iph1c1eLVtCHEfwaJTH9Y-0-77a823f5a982a216a57801be6655eeaa)
图1-3-7
执行下面两条语句:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_25_3.jpg?sign=1739032539-d4Mu047H0AS8xjGCcrdnebE47mhwnlJg-0-6b7bc87b05fb9e1fc67c2a9cb1619b00)
设置邮箱和用户名,以此作为身份标识。如图1-3-8所示,在设置后,再执行git commit就能正常完成提交了。用git status查看状态,可以发现设置成功。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_26_1.jpg?sign=1739032539-juquw2MVgIzo4GapYgDoAORbU58LWRPW-0-d2f9d33d3050a18cd174780ba78f1646)
图1-3-8
有时候一些文件并不想用Git记录,比如一些临时生成的“.pdf”“.exe”等文件,并且不想每次git status的时候系统弹出提示信息,那么此时可以在文件夹中新建一个“.gitignore”文件。这个文件的作用就是记录不想跟踪的文件。可以用文本编辑器打开:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_26_2.jpg?sign=1739032539-bpqP5aI0iGEeWz1Jm4FB31SPEPvVp55U-0-8e39bc8448cd8c316d79c7d756be21aa)
写上不想跟踪的文件后进行保存。
以上是对本地已有的工作目录创建仓库,还有一个创建的方式是对已有仓库克隆,命令如下:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_26_3.jpg?sign=1739032539-LqPF47cILVMZwaYgr45xw4sqAs9FJPwm-0-699d53d110d2b3be82fca5521fc86ecc)
由于本书的附件资源在gitee上建立了远程仓库,因此也可以使用克隆的方式将远程仓库复制到本地。在gitee网站上任何一个项目都可以找到克隆的网址,如图1-3-9所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_26_4.jpg?sign=1739032539-lAhiKAgvR5EtDvbuIDxe9GFrnBIFjzGV-0-6df7c664239e7831c4329367ba427a64)
图1-3-9
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_27_1.jpg?sign=1739032539-JT7jCpPValIKCXGr9qze4bID4bwlx2Q5-0-30bda893942ea2c6bc472128837081b7)
使用git clone命令完成克隆后,就可以在本地学习、修改、运行代码了。
记录文件修改
显示更改信息
对于每一次文件的修改更新都可以用git add 添加到暂存区,再用git commit 完成提交。这两个命令是最简单和常用的,下面介绍在文件修改过程中可能会用到的命令。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_27_2.jpg?sign=1739032539-sBtMsWHdLqWCgftc0YjrdyCrMeiECIGN-0-fbd0ba38090f0df1725596451a70a578)
git diff 用来查看修改后与已存入暂存区的版本的差异。在创建的仓库中audit.txt添加一行文字“第二行文档”,再执行git diff命令,如图1-3-10所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_27_3.jpg?sign=1739032539-0BNetZ32YgGUqS9nZBZXJhpkH2Lr5U5C-0-443f80214c5fad11c30e643af14c184f)
图1-3-10
如果使用的时候有中文乱码,那么通过执行以下命令,修改core.quotepath参数即可:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_27_4.jpg?sign=1739032539-4vXKgqssaGenGh29K2WxjHF494TQRmlX-0-e82bde4022a47d25a1c7b3e6b9741c62)
删除文件
对于已经提交的文档,如果直接删除,那么在使用git status 的时候还是会显示出该文件。因此需要使用git rm删除该文件。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_28_1.jpg?sign=1739032539-Gbt1cIP1FODYaktNjw8fzCSQFOYv1EXK-0-9c13cbd32009ca5a27b1ae94cc6d8c42)
移动文件
当我们想将某个文件移动到仓库中的路径的时候,需要使用git mv命令,当然修改文件名也是用这条命令。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_28_2.jpg?sign=1739032539-O1tSm5frfs9h5OuunYcjU51GHZVmXth1-0-f3437bf3c275bd73c5ad60d8dd1c9008)
对于文件的新增、修改、删除的操作我们都已经掌握了,那么在写文档的时候,如果想保留以前的修改,该怎么回退到以前的版本呢?由于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=1739032539-pua7ArbuRRRrOTqcpNxCiJpr1J49eQQ0-0-e46f391ca14a5f4cb3bc1961ce38de58)
这里可以看到系统提示使用git restore放弃修改。通过执行:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_28_4.jpg?sign=1739032539-0ZVCiO3evn7kAr49KAoi8ZN1Oen97kMj-0-71872ce65d3b1119643d1bbd4a4523d4)
回退到修改前的版本。注意,有些Git版本是使用git checkout 文件名来放弃修改的,具体看系统提示。
已记录到暂存区
在audit.txt文档中添加一行记录并使用git add将其添加到暂存区,执行git status:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_28_5.jpg?sign=1739032539-cW4yjObshVXuy4zUqCNAqP7EKWmma4N6-0-edcd2e17be9271a893d471d97a1095c2)
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_29_1.jpg?sign=1739032539-zDJ2RMlp3dXXcZwaQ6aF4qtjdbmfVpMn-0-d4cd5467a88a3339689451a92d7c8a4c)
可以看到系统提示使用git restore--staged <file>以放弃将记录添加到暂存区。由此也可以看出,并不需要一开始记住那么多命令,跟着系统提示操作即可。
已提交
当提交次数过多的时候,则可以使用git log查看历史提交的版本:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_29_2.jpg?sign=1739032539-OkRNM3r5Nc5YH680QmnObMgxvILIy2R6-0-3895de218ac636c84723540dd1ee6c44)
可以看到现在仓库里有两个版本,包含了SHA-1值、作者、日期、commit描述信息。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_29_3.jpg?sign=1739032539-gn6uElCHUpiBs2E5o8iV88pxctFrNLA9-0-833532190183ecaaceac0eb97abb1619)
当commit多次后,如果直接使用git log,那么展示的历史信息就会很冗长,为了限制查看的版本数,可以使用命令:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_29_4.jpg?sign=1739032539-JEaBxlivROw3ycM8NbLBffhVUKMpQb20-0-f63d3c80a132b82c9058110239abd894)
显示最近两个版本,当然数字可以修改。如果在显示版本时,还想看每个版本具体做了哪些修改,那么可以使用命令:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_29_5.jpg?sign=1739032539-PJMhyyiHh0KvWoVnrsbKI6OG3DyCPzLF-0-aaeeeac9e1bf0920735c2b7febad563a)
-p参数能够显示每个版本的具体修改内容。
除此之外,git log还有很多参数可以选择,感兴趣的人可以使用git log--help查看。这里推荐使用:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_30_1.jpg?sign=1739032539-4lud9JU7cdDMcF81oIFnmOea2J1HwW9F-0-e695fdea65822378e776b0463a661af8)
● all表示同时显示所有分支的记录。
● graph表示以图形化展示版本记录。可以方便地看出分支的合并情况。
● decorate表示美化显示。
● oneline表示每条版本记录只显示一条关键信息。
显示效果如下所示:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_30_2.jpg?sign=1739032539-5nxWbPQXagOmtmZJrtuZMTOYfUOOhg23-0-52cb4f7c6912033cde605a2bacc6b3da)
接着刚才回退的话题,如果想回退到“init my document”这个版本,那么可以使用命令:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_30_3.jpg?sign=1739032539-0fJagfOBfsJ8I71EY32TGi9aaYP1laCD-0-21afd58b9b74c8bff404330009db24d3)
这里的SHA-1值就是执行git log的时候显示的字符串。比如想回退到最初始的版本,那么就执行:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_30_4.jpg?sign=1739032539-gQxMkmzVsKLQlgelToH6pfZxzc2decSN-0-6aa2e29ff8cb7c4cf5afe12762ed2630)
这里的SHA-1值不需要输入完整,输入前面几个字符就可以,如“6e8e”。这个时候已经回退到了初始的版本。如果只有一个文件需要回退到之前的历史版本,对其他文件的修改还想保留,那么可以进行如下操作:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_30_5.jpg?sign=1739032539-Wm3wKhMLzcSDiLkpYJgy3F2Mj7uCSTEJ-0-c5034beca0ff43bc3f437e8c2560bf25)
如果又想恢复到之前的版本怎么办?可以使用git reflog查看引用日志。当你在工作时,Git会在后台保存一个引用日志(reflog),引用日志记录了最近几个月的 HEAD 和分支引用所指向的历史。执行以下命令:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_31_1.jpg?sign=1739032539-tz5rTHu8a7foL6d9VxvowNsrSvM1pBxe-0-3f2aa4f64e3a0e3504d110daa7593b1e)
这里可以看到回退前的版本SHA-1值为d6a60f8,继续使用git reset命令回到回退前的版本。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_31_2.jpg?sign=1739032539-GmM0tySKdWQ81kneK1MAc38pQPXkIksf-0-799f813805ed920887467fc3b6fe955a)
分支的使用
有时候需要对文档进行较大幅度的修改,甚至是尝试一条新创作方向,但是最终是否成功我们并不知道。如果把之前的创作比作主路的话,那么再创建一个分支就是尝试新的道路。如果失败了,还能重新切换到主路去。创建了一个“dev”分支。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_31_3.jpg?sign=1739032539-TyGEnorX5w76SGpIkBWOAI6KVvl3lzdc-0-ac21ccb5b5156e29037665433beb283b)
使用git branch查看当前所有分支:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_31_4.jpg?sign=1739032539-XwK1eMM39hD1cvZETruVoeWzcPQv1v3r-0-11dfd4c14fa426b107c7fd710a2b40f3)
可以看到显示出了两个分支master和dev,前面的星号代表现在还停留在master分支上。如果要切换到dev分支,则可以用命令:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_31_5.jpg?sign=1739032539-HAb9IGQYb1Acy10WZDGiPl17UOxN4Mv9-0-85e2ec103bb6903d429cd58adcb560a5)
当然可以使用git checkout-b命令将创建分支、合并分支两个步骤在一条命令中执行完:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_31_6.jpg?sign=1739032539-b5iS9augOEMNhcFJSC9xY0Jd3uNDfkwO-0-16a9e845fac762f0e3746ffa71cdcd3d)
比如新建一个tax.txt文档后进行添加、提交。于是在dev分支下就有了3个文件:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_31_7.jpg?sign=1739032539-t87xKIGWMz2fJ9dJnvVjIkH6QjRQr7ND-0-b5a52fd4a77963421294f862e53465ba)
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_32_1.jpg?sign=1739032539-ICvDxz6qXST10pj0fNnOzmWmuIXYo1Wk-0-b73e5900d43b3da6615ecb64f6bc196d)
切换回master分支:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_32_2.jpg?sign=1739032539-aMq74DU9Ub5VphavEsXPzq4kq5OTtEE3-0-966f9b20ff4cf5af09b3c32e2b84a580)
用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=1739032539-v7cFZcAKz4sRkwzzuGW1xhRELxJTwFI3-0-bc07f83a06018495bb13387061ca6d20)
合并成功后,dev分支的修改就都保存在了master分支上了。如果不再需要dev分支,那么可以使用git branch-d命令进行删除:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_32_4.jpg?sign=1739032539-p3cBSPkoyzplZovxrteGU7NkxVxvbYaK-0-fd5d33dfc7af3d6b166abce6b389dc2a)
对于分支的使用,初学者掌握到这里就差不多了,如果有更多需求,可以查看Pro Git文档。
添加远程仓库
前面所有的操作过程都是在本地计算机完成的,也就是说我们使用Git进行版本控制时可以不需要网络。但是如果有多台工作设备或者需要和他人协作,那么文档只存到本地计算机里就不行了,我们需要远程仓库。远程仓库是指托管在因特网或其他网络中的项目的版本库。而Github就是最知名的免费远程仓库了,可以将本地的版本库托管到上面。由于网络原因,这里使用国内的gitee。
注册好gitee账号后,新建一个空项目,填写好仓库名称、仓库介绍等,如图1-3-11所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_33_1.jpg?sign=1739032539-V664PQSC2qCn7K1DD1fioTd4H4bkxexp-0-806ae6d9b1d3a922460be6cda47a5f74)
图1-3-11
创建后,网站会给你一个远程仓库的网址,以及和远程仓库连接的命令,如图1-3-12所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_33_2.jpg?sign=1739032539-xVsFeBgpSUFJFl2JXVpJNpwt6fgQQmYz-0-e14b76c24c1d64346d1f6a6191013707)
图1-3-12
添加远程仓库
将本地的IT项目添加远程仓库后,就可以使用git push命令将本地的仓库进行推送了。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_33_3.jpg?sign=1739032539-xvoV1SHOZLestRQb6B56OFDs5tpaeNJ5-0-6199ca6a413e41b407da95cad9bd37e0)
推送到远程仓库
直接使用git push会报错,如图1-3-13所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_34_1.jpg?sign=1739032539-DP6Y5dgWJjbAzrq5NXxIZe1ZZAlm7VoS-0-eac5ef29da381427bb736d8b727602c9)
图1-3-13
由于这是一个新项目,所以提示我们使用命令:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_34_2.jpg?sign=1739032539-ZJdUHXYaeTW5dw7xFNk1TxhsuD7u8Zrs-0-cb4c2c77d045d0fa23fe830fad906124)
如果添加远程时使用的是https的网址,则会提示你输入账号、密码,然后推送成功。如果添加过程时使用的是SSH协议的网址,则会提示没有权限。因此得进行配置让远程知道谁是这个远程库的拥有者。
删除远程仓库
为了测试,先将前面添加的远程仓库的连接删除:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_34_3.jpg?sign=1739032539-3qJnT5Lm6yiUoFgcNf6SgUINSfC37XNr-0-155d882e54171212106b5a0be757d619)
免密码添加远程仓库
此处只需要在前面的网址中添加上用户名和密码,这样后续的推送就不需要再输入了。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_34_4.jpg?sign=1739032539-qoHaAl6KE2bMnLndn1mBr5xifhj9YI19-0-6cdd76386153a9495f257ae8b15aaf47)
输入以下命令(填写自己的信息)。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_34_5.jpg?sign=1739032539-7jURO8tHxgrXl7SK9itjRWBLnVi60J5e-0-1eb04ffc85277f663e09496c6acfe708)
当然,如果是一个新项目,那么可以在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=1739032539-U8DsQEWqQw7CI8znwKsR3DEOPtKSaB84-0-8c2675621a20b3062febc588a8e030da)
如果是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=1739032539-VGAzboDHveeP48q4LIoM8TULJIR228WC-0-2029917bf22b6a2a7425f5f994d690d9)
图1-3-14
添加完成后,gitee上有公钥,而我们的本地计算机有私钥,这样就可以安全通信了,使用git push的时候也不用再输入密码了。
推送和拉取代码
push
将本地分支推送到远程仓库对应的分支。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_36_1.jpg?sign=1739032539-4dca1X1MZlHQJ6BcZ7CDJmc0EG5vWvHl-0-fa4b678ffb980dab8d35129ed5b61772)
fetch
将远程仓库拉取到本地计算机。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_36_2.jpg?sign=1739032539-xevqU13juy9Ltell44eXlNdOZBLNzIOO-0-39c5da2defa920c32aaaf41900b37a01)
pull
将远程仓库拉取到本地计算机并与本地版本合并。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_36_3.jpg?sign=1739032539-eEbZbwpzjE9kk8G9as2jMDFIMVav1zf2-0-9fd63945e6d954fc3ce231a3abf87f66)
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=1739032539-1gWDC9xIfHXjQD4HCjtkMccK3i6uluUC-0-348da687a87549008e1a449b54028ca3)
图1-3-15
找到Fork后的项目网址,使用git clone克隆到本地计算机,切换到dev分支(也可以使用master分支),可以帮助原作者修改一些错别字或者Bug。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_37_1.jpg?sign=1739032539-HV8rR7ttATRdmHYjT5QTKN409HnQMHXv-0-a8861ae8bf43cb516b2d99cb99f5faca)
修改完成后,提交并推送修改:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_37_2.jpg?sign=1739032539-LvKEVtMYI5iIJgrozBgjYBtoqov11cV4-0-12839e7b6f31b28d8e2a5480d93f9230)
● 在自己(不是原作者)的gitee上切换到dev分支,并单击“New pull request”按钮。填写好描述信息后,单击“pull request”按钮,编辑标题并做简要描述。
● 此时你的“pull request”请求原作者就能看见了,如果原作者觉得你的修改不错,那么就会merge到他的分支上,这样大家就一起完成了一次协作。
作业:
1.Fork audit-guid项目,创建一个分支,发现并修改一些错误后提交pull request。
2.遇到问题可以查看Pro Git,或者通过搜索引擎寻找答案。