![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=1739578612-hDfDeWKEHatVdNQNJ6d7ytHwvHXhb2hg-0-958503d1ebe4e4bfe6e122017c9b8bbb)
图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=1739578612-8n34YVVYCAeZKLCK25M9kbe4kZa2HUjo-0-2827641f3bf795356937a2ae56c88be7)
图1-3-2
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_22_3.jpg?sign=1739578612-EQMgSGcMei96Y7XIpmsZHaX1VIxvb9Oq-0-c5616d0762fa83963e25dc68ef4674cb)
图1-3-3
Ubuntu用户
对于Ubuntu系统的用户,可以不用上述安装过程,直接在命令终端里运行命令即可:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_22_4.jpg?sign=1739578612-cDasqxLqz2JjWTtaJVz9vnKOrK8A8Lrj-0-4126ed722345fbf6775e8a26c2a9ef4b)
Mac用户
Mac和Ubuntu都是类Unix系统,都可以在命令终端里用命令安装:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_23_1.jpg?sign=1739578612-7kniVgnQXZ4JPt56d75ZU6fl6jX4KO4v-0-6748222986f6eee8ca98f0eabadd1515)
建立Git仓库
安装好Git后,如果想对本地计算机中的一个文件夹进行版本控制,那么需要怎么做呢?
很简单,从命令终端(Windows中为Git Bash)打开需要进行版本控制的文件夹,执行:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_23_2.jpg?sign=1739578612-Iff8jtjxaJT277yVG0yJSPo5fLNX3BXx-0-3bd93bec206f8b9834d122ed4027015f)
平时用Windows的人可能不清楚如何从命令终端打开某个文件夹,例如,在计算机D盘下有一个名为IT的文件夹,那么要打开这个文件夹可执行:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_23_3.jpg?sign=1739578612-avsMPjWvhVx29Ri39pNTImuB4yJgPpUS-0-f01eaa065fe82317334734aefc552cf2)
这里的cd命令就是切换目录。如果文件夹路径比较长,记不住怎么办?可以通过使用cd命令,再使用ls命令查看当前文件目录下有哪些文件,再使用cd命令切换到需要的目录,如图1-3-4所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_23_4.jpg?sign=1739578612-NyI7RxJK5GJ3bya0yivDfWSan1gvfZS7-0-856a0811358f6d0c54c939699e461d72)
图1-3-4
注意,输入路径时可以使用Tab键补全。
当执行git init进行初始化后,就会在当前文件夹下出现一个扩展名为“.git”的隐藏文件夹,用来存储版本控制的数据和资源。当然,我们现在还不会对当前文件夹下的文件进行跟踪和版本控制,只能先进行结构化框架的初始化。下面执行:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_24_1.jpg?sign=1739578612-UmJ5xWdDUho25UkFUx6qyb0UjnLbBfm1-0-ea0f3f7e7ec94b629399a35421d24915)
这个命令是使用最频繁的命令之一,作用是检查文件状态,简单理解就是通过该命令可以查看系统是否有记录文件修改,以及修改是否有提交。只有系统进行了记录,将来如果我们想回退到某个之前的版本时才有可能进行操作。
为了演示方便,这里新建了一个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=1739578612-tm9WLP9UH2Kf2yxJtBsmXQ5dniiA03UV-0-8b71041921df1e61969e3e705cd0ce4e)
图1-3-5
如果要将该文件纳入版本控制,那么需要使用git add命令跟踪这些文件,执行:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_24_3.jpg?sign=1739578612-apj2wrpOfRsCqFsEvZqyjvynVUWIDdOQ-0-7ee4be445ea5bde4567ffea355b2bb7a)
这里可以用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=1739578612-pRkqPTaY9C5slBovKf68NJYUOy7sm8Yv-0-7d2cc4b4018ed8ec6eb6d4756c8f1263)
图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=1739578612-FvVuaOlXfmze4OznVmWHjmE726qEA3kJ-0-1aea2e725a95fe607eaf16f19a4e0fa4)
这里的“提交描述”是对本次提交版本的说明,以便之后进行识别。在执行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=1739578612-hcELPsyF9tRQQocwUM6VITXpcTIlypNi-0-bd5d3f4ca60578a485a4b3448de4115f)
图1-3-7
执行下面两条语句:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_25_3.jpg?sign=1739578612-683vheHKAsgLpoCbRNaxb061vqTD3JZm-0-9fc704811fe4b3085351165855181ba6)
设置邮箱和用户名,以此作为身份标识。如图1-3-8所示,在设置后,再执行git commit就能正常完成提交了。用git status查看状态,可以发现设置成功。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_26_1.jpg?sign=1739578612-8tjnafCVYGKmFcbeGC2QCNpGbJQBPsLF-0-7127e4c811bec2fad28620aa5e807b0d)
图1-3-8
有时候一些文件并不想用Git记录,比如一些临时生成的“.pdf”“.exe”等文件,并且不想每次git status的时候系统弹出提示信息,那么此时可以在文件夹中新建一个“.gitignore”文件。这个文件的作用就是记录不想跟踪的文件。可以用文本编辑器打开:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_26_2.jpg?sign=1739578612-BwFDintCuWdR7NNdQQBIt5WYLXJr7cPn-0-d203f963de61b301e396e2ba5f4a7de4)
写上不想跟踪的文件后进行保存。
以上是对本地已有的工作目录创建仓库,还有一个创建的方式是对已有仓库克隆,命令如下:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_26_3.jpg?sign=1739578612-YO9zvUAWW9TfhFTw5oTNnu5VH1yx92ax-0-75165cb8366317c83e4f157e59e61663)
由于本书的附件资源在gitee上建立了远程仓库,因此也可以使用克隆的方式将远程仓库复制到本地。在gitee网站上任何一个项目都可以找到克隆的网址,如图1-3-9所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_26_4.jpg?sign=1739578612-1nnvAnPPeuLFRTQiWiZmQsHZ5wKhC4GN-0-2416ab23a53b7ecf75e83dc0c4e4f3a2)
图1-3-9
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_27_1.jpg?sign=1739578612-7cPXhXONxZ9gvuCwbQWsPaL4IYmP50P2-0-f81cf3d6bc2b042513d64341516e8735)
使用git clone命令完成克隆后,就可以在本地学习、修改、运行代码了。
记录文件修改
显示更改信息
对于每一次文件的修改更新都可以用git add 添加到暂存区,再用git commit 完成提交。这两个命令是最简单和常用的,下面介绍在文件修改过程中可能会用到的命令。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_27_2.jpg?sign=1739578612-tubLNjdIokh0TIKUSq9dcuDqeUPyFGIZ-0-f735ee1a4b617b5b45c25201eeda29be)
git diff 用来查看修改后与已存入暂存区的版本的差异。在创建的仓库中audit.txt添加一行文字“第二行文档”,再执行git diff命令,如图1-3-10所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_27_3.jpg?sign=1739578612-YcIzWVsMOwlOs09TYDyvS2FZRChWUFQG-0-0158cc0d92718928a88330f296cf58a4)
图1-3-10
如果使用的时候有中文乱码,那么通过执行以下命令,修改core.quotepath参数即可:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_27_4.jpg?sign=1739578612-zS7smp7Pg7GFr2vIjUJ3Q7GDBsmN10tU-0-c72ddc4370ac215fa195b02dc97c3762)
删除文件
对于已经提交的文档,如果直接删除,那么在使用git status 的时候还是会显示出该文件。因此需要使用git rm删除该文件。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_28_1.jpg?sign=1739578612-UfF9S3Gdi5itKBh8lnlHz2lnphOrsx2k-0-16454bff9b221c34962cb5432c45c7e8)
移动文件
当我们想将某个文件移动到仓库中的路径的时候,需要使用git mv命令,当然修改文件名也是用这条命令。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_28_2.jpg?sign=1739578612-CYrxEGlBwiucoHa3dHUFh9YIIS7sHSws-0-b43cd0a7f335f7af1d67b81a5f0118ed)
对于文件的新增、修改、删除的操作我们都已经掌握了,那么在写文档的时候,如果想保留以前的修改,该怎么回退到以前的版本呢?由于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=1739578612-yyzPMej9baI0Z4UV0zLTDNrD9PY72PIn-0-f2f5a7e1c789f493f483c0ce1a0886af)
这里可以看到系统提示使用git restore放弃修改。通过执行:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_28_4.jpg?sign=1739578612-8ONsKmR7dSBl7TECegU3w6KNf8OewilC-0-960fceed4e826a64681a8f3f9c9d9f6c)
回退到修改前的版本。注意,有些Git版本是使用git checkout 文件名来放弃修改的,具体看系统提示。
已记录到暂存区
在audit.txt文档中添加一行记录并使用git add将其添加到暂存区,执行git status:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_28_5.jpg?sign=1739578612-sgylNknJELabmLwHzu2SVK1x6O564bjX-0-97c0c04769b42719da5b2bf8da0c4797)
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_29_1.jpg?sign=1739578612-WnJLGIcAc6VYJT5KTqOINldjdTkV8lVn-0-69dbcacf0a9c06646020e00ec8c2e2f7)
可以看到系统提示使用git restore--staged <file>以放弃将记录添加到暂存区。由此也可以看出,并不需要一开始记住那么多命令,跟着系统提示操作即可。
已提交
当提交次数过多的时候,则可以使用git log查看历史提交的版本:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_29_2.jpg?sign=1739578612-mqmjbFXsXEA4gYE1sKEo5iTvSW6SOeBi-0-bc2e5499fed5e0033363f067eee91464)
可以看到现在仓库里有两个版本,包含了SHA-1值、作者、日期、commit描述信息。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_29_3.jpg?sign=1739578612-jbTbiK7axGGm3ghOGBpRf82lbeNTOdzi-0-39c885b50aed825eb7d0df442f06832f)
当commit多次后,如果直接使用git log,那么展示的历史信息就会很冗长,为了限制查看的版本数,可以使用命令:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_29_4.jpg?sign=1739578612-ToYvlnb3vru4JbinYsN9sp0ycBwOdYBc-0-015c0551567067eb67359903d44617cd)
显示最近两个版本,当然数字可以修改。如果在显示版本时,还想看每个版本具体做了哪些修改,那么可以使用命令:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_29_5.jpg?sign=1739578612-xYy53wIq0J1gaMaiOdOAfQhmDYIJnCEF-0-c842cf51abf2754a3739ee5b3d8ec64d)
-p参数能够显示每个版本的具体修改内容。
除此之外,git log还有很多参数可以选择,感兴趣的人可以使用git log--help查看。这里推荐使用:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_30_1.jpg?sign=1739578612-5OusisjBXTtHX8azN3A4Ndhp6diJMW1H-0-6780ba1631cbecb0fa423b185b03b1fa)
● all表示同时显示所有分支的记录。
● graph表示以图形化展示版本记录。可以方便地看出分支的合并情况。
● decorate表示美化显示。
● oneline表示每条版本记录只显示一条关键信息。
显示效果如下所示:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_30_2.jpg?sign=1739578612-uhDi9fxGbpG90rDE81mFOCN3kqD4S7Qb-0-3751904547a9f030281798bf9536578b)
接着刚才回退的话题,如果想回退到“init my document”这个版本,那么可以使用命令:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_30_3.jpg?sign=1739578612-Ms33zGQs2bKIp9GVRa9VYxKR1wjZ7txG-0-ae4850e4702a60cb78ebd784f634a5f5)
这里的SHA-1值就是执行git log的时候显示的字符串。比如想回退到最初始的版本,那么就执行:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_30_4.jpg?sign=1739578612-pecC3ylxrv2j2D7gSZOk7f4TTT2L1hto-0-2099aaa427b99e8e105e24a600a33804)
这里的SHA-1值不需要输入完整,输入前面几个字符就可以,如“6e8e”。这个时候已经回退到了初始的版本。如果只有一个文件需要回退到之前的历史版本,对其他文件的修改还想保留,那么可以进行如下操作:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_30_5.jpg?sign=1739578612-XLFkPC8Ihdr3R0vtlY4vZ3V7kdepAffL-0-111cc51ede176254ac40044d469d002e)
如果又想恢复到之前的版本怎么办?可以使用git reflog查看引用日志。当你在工作时,Git会在后台保存一个引用日志(reflog),引用日志记录了最近几个月的 HEAD 和分支引用所指向的历史。执行以下命令:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_31_1.jpg?sign=1739578612-NA5PQ4rEZL2Mc4yUIlPOGLvYf1Mef1E9-0-e429531f746672353d956b75053d100b)
这里可以看到回退前的版本SHA-1值为d6a60f8,继续使用git reset命令回到回退前的版本。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_31_2.jpg?sign=1739578612-ADxd7ZCJeoqchRhBUUEWEFUiQ8HWQI6o-0-38c381a400c5394acf13e53737cfe4a0)
分支的使用
有时候需要对文档进行较大幅度的修改,甚至是尝试一条新创作方向,但是最终是否成功我们并不知道。如果把之前的创作比作主路的话,那么再创建一个分支就是尝试新的道路。如果失败了,还能重新切换到主路去。创建了一个“dev”分支。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_31_3.jpg?sign=1739578612-l8KXM1AP0Vd9v7CBK7D12r0J2IquyPWh-0-966b99dd32eccd6910a4393f6461b4cb)
使用git branch查看当前所有分支:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_31_4.jpg?sign=1739578612-mYZd6hYMBOdnNFyXnbnEQaCZ47mmskRN-0-e51ad9acccb2ba0e5670881328d95c2b)
可以看到显示出了两个分支master和dev,前面的星号代表现在还停留在master分支上。如果要切换到dev分支,则可以用命令:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_31_5.jpg?sign=1739578612-ChNGbAcHBMYjEb4009cqrJmtEABpgJC7-0-04e5a15448f600a5fdd928ba055e9f8f)
当然可以使用git checkout-b命令将创建分支、合并分支两个步骤在一条命令中执行完:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_31_6.jpg?sign=1739578612-D6MGcMRzkhyuYR9epXov4K8VdCIha3W3-0-a4e8afccbe23b7aabcd1570f0b06e52b)
比如新建一个tax.txt文档后进行添加、提交。于是在dev分支下就有了3个文件:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_31_7.jpg?sign=1739578612-OeyBdZD2Dlx5KNFMj4mb0ZKB2ekbxOsr-0-cbb7b9209cf2c81e32b18d07794eb7b3)
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_32_1.jpg?sign=1739578612-cE9AbpBvL4lCcZtJHp7rorPoQJSg8sp8-0-45113c0bc0474f81c6368594ff4fa46d)
切换回master分支:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_32_2.jpg?sign=1739578612-8mZS7ITVQJtdZO9sBODSNGX3B1Qktkm1-0-57c58bef4d7468358c968cdf11c22c9f)
用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=1739578612-Sz5dS5srHqpFxPPDm4WfwKfMwHJLJJ4e-0-6975aa1acdc8a745a124459e3bec3dd0)
合并成功后,dev分支的修改就都保存在了master分支上了。如果不再需要dev分支,那么可以使用git branch-d命令进行删除:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_32_4.jpg?sign=1739578612-BF3dxfXrB6YkKNbVFgd1HPap1ZTc67aE-0-8811b9f24c827b580547fde003d8ee55)
对于分支的使用,初学者掌握到这里就差不多了,如果有更多需求,可以查看Pro Git文档。
添加远程仓库
前面所有的操作过程都是在本地计算机完成的,也就是说我们使用Git进行版本控制时可以不需要网络。但是如果有多台工作设备或者需要和他人协作,那么文档只存到本地计算机里就不行了,我们需要远程仓库。远程仓库是指托管在因特网或其他网络中的项目的版本库。而Github就是最知名的免费远程仓库了,可以将本地的版本库托管到上面。由于网络原因,这里使用国内的gitee。
注册好gitee账号后,新建一个空项目,填写好仓库名称、仓库介绍等,如图1-3-11所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_33_1.jpg?sign=1739578612-id9WVGtvgAcmFuCIFBCQAn23xixV4tgQ-0-614e2749fb9baeecaae4f977f72b3775)
图1-3-11
创建后,网站会给你一个远程仓库的网址,以及和远程仓库连接的命令,如图1-3-12所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_33_2.jpg?sign=1739578612-Ghs90clE6NTI6gdPqzhFUX2QWGf6hOEg-0-493a113392aa81938da70042b481eaf2)
图1-3-12
添加远程仓库
将本地的IT项目添加远程仓库后,就可以使用git push命令将本地的仓库进行推送了。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_33_3.jpg?sign=1739578612-f2ge5OY8OrxGjMr9LBKSGA1q9kACQsYT-0-acc19ae619e4083708eb42bc9395f705)
推送到远程仓库
直接使用git push会报错,如图1-3-13所示。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_34_1.jpg?sign=1739578612-z0ff4e6D2fXSNILEobZCRkacsmvPFer2-0-73251bc98436b96e5ffc2874d07ba266)
图1-3-13
由于这是一个新项目,所以提示我们使用命令:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_34_2.jpg?sign=1739578612-RaXTycE7LdeEczle3pbDVgkbxnrkakrr-0-63e130c306b3d7346728b0b3f5569a95)
如果添加远程时使用的是https的网址,则会提示你输入账号、密码,然后推送成功。如果添加过程时使用的是SSH协议的网址,则会提示没有权限。因此得进行配置让远程知道谁是这个远程库的拥有者。
删除远程仓库
为了测试,先将前面添加的远程仓库的连接删除:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_34_3.jpg?sign=1739578612-XwpDSfHgJqhNZmGA0tQ30r9h7pXpMUtB-0-965007a1f9d8df9ca1c400c95c844add)
免密码添加远程仓库
此处只需要在前面的网址中添加上用户名和密码,这样后续的推送就不需要再输入了。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_34_4.jpg?sign=1739578612-SmgQ5BAl83tEwyQqMWIGOwQYPNJJvGsG-0-1f30672f96268f7bab4b5ec6e258f206)
输入以下命令(填写自己的信息)。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_34_5.jpg?sign=1739578612-EDXOIpUBiXC9di6xGRpaTgSf5JTnKMoi-0-934c31fa1aa5caf9cbb657a1efae3a3f)
当然,如果是一个新项目,那么可以在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=1739578612-g7YPlIi2voPbOpkfjBQbtRNrgZSRo6kB-0-ec9afc4cfec4b04c5846362be0d87eb1)
如果是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=1739578612-FsVWKTEzUXx7RgmVkn16zaG6Fveac8bo-0-5fd97477659d69e89efecc92537ce060)
图1-3-14
添加完成后,gitee上有公钥,而我们的本地计算机有私钥,这样就可以安全通信了,使用git push的时候也不用再输入密码了。
推送和拉取代码
push
将本地分支推送到远程仓库对应的分支。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_36_1.jpg?sign=1739578612-6PFV7Zo9XKq5tMkeNCSEFybEk41YmGQd-0-944294cf65685ba2a6c699a3d6747459)
fetch
将远程仓库拉取到本地计算机。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_36_2.jpg?sign=1739578612-IseWf3aqkva3JrDXSkeJQjejTaSTMwY4-0-d29c2095ff8501d9a4a4000df807f205)
pull
将远程仓库拉取到本地计算机并与本地版本合并。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_36_3.jpg?sign=1739578612-B1rNoOiztgnEOH6dRblOqjVhsmzIFrXg-0-6b9da27b79246634cc82d9c635fb9baf)
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=1739578612-fNuT3qLkEs3WuKt2mSK3rISGJhttpSp2-0-fbaef00f9cd5e7da49cfe338718c972d)
图1-3-15
找到Fork后的项目网址,使用git clone克隆到本地计算机,切换到dev分支(也可以使用master分支),可以帮助原作者修改一些错别字或者Bug。
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_37_1.jpg?sign=1739578612-UVQCqQzlhMaKbqx71ZDTuFeJQFXnv6am-0-e9f440b017b303028890257b10db71e0)
修改完成后,提交并推送修改:
![](https://epubservercos.yuewen.com/C254D8/23950190601249406/epubprivate/OEBPS/Images/43346_37_2.jpg?sign=1739578612-uESFP9Ctuyq3Ci0uv8idr5fJVoh74t8P-0-075232594bac245bebdb9e03f591688b)
● 在自己(不是原作者)的gitee上切换到dev分支,并单击“New pull request”按钮。填写好描述信息后,单击“pull request”按钮,编辑标题并做简要描述。
● 此时你的“pull request”请求原作者就能看见了,如果原作者觉得你的修改不错,那么就会merge到他的分支上,这样大家就一起完成了一次协作。
作业:
1.Fork audit-guid项目,创建一个分支,发现并修改一些错误后提交pull request。
2.遇到问题可以查看Pro Git,或者通过搜索引擎寻找答案。