【GIT】 理解git工作流程、git插件与命令行、可视化练习

【GIT】 理解git、git工作流程、git插件与命令行、可视化练习

----->>点此gitee同步文档<<-----

git是什么

rcs、git与svn的区别

本地版本控制

记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用,如RCS。

集中式版本控制

SVN等CVCS集中化版本控制系统都有单一的Central VCS Server,所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改。

分布式版本控制

每个开发者都拥有全部的副本。

git客户端不仅做本地的文件快照,还会将本地resposity完整地镜像出来,这样开发者即使可以离线在本地仓库commit,也可以在连网时push到关联远程resposity的任意branch。

镜像容灾,任何一处协同工作服务器发生故障,都可以用任何一个镜像出来的本地仓库恢复。每一次clone,都是一次对远程resposity的完整copy。

Git的四个组成

  • Workspace:工作区,就是你平时存放项目代码的地方

  • Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息

  • local Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

  • Remote Respository:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

git r

git工作流程

一般工作流程如下:

  • 在工作目录workspace中添加、修改文件 git add
  • 将需要进行版本管理的文件放入stage暂存区域 git commit
  • 将stage暂存区域的文件提交到远程git仓库git push
  • 将远程仓库对应分支的代码合并到本地仓库git pull

OIP

git文件的四种状态

  • Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.

  • Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件

  • Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !

  • Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

20171212193726547

.gitignore忽略文件

这边不赘述了,现在都有模板,gitee和github官方模板,自己再加入忽略文件或文件夹,这里有简单介绍 gitignore

搭建git,关联github和gitee

工作中实际都会搭建私钥gitlab,但远程仓库的原理是一样的,都是ssh实现

注意下示例代码git命令里带<>的都是需要填入自己的对应参数

git-command

1. 搭建本地仓库或克隆远程仓库


$ git init 

or 

$ git clone <git@github.com:liuchaodada/pycharmProject.git>
$ git clone <git@gitee.com:liuchaodada/pycharmProject.git>

2. 配置git,设置用户名和邮箱


$ git config --global user.name "<username>"
$ git config --global user.email "<useremail>"

用户名可以写自己的名字或者github gitee的注册名
邮箱必须写github或gitee绑定的注册邮箱,每次commit会提交这两个信息

3. 生成ssh密钥,测试ssh连接


$ ssh-keygen -t rsa -C "<youremail@example.com>" -f  <rsa_github>

$ ssh-keygen -t rsa -C "<youremail@example.com>" -f <rsa_gitee>

后面的 your_email@youremail.com 改为你在 Github 或gitee上注册的邮箱,之后会要求确认路径和输入密码建议不设置passphrase密码直接enter跳过,我们这使用默认的一路回车就行。成功的话会在 ~/ 下生成 .ssh 文件夹,进去,打开 id_rsa.pub,复制里面的 key。-f 是指定密钥name,这里我建了两个密钥一个是github的一个是gitee的。

4.添加ssh公钥到github gitee

这部分不赘述,在gitee和github个人主页设置里有,我们生成的密钥在
/root/.ssh文件里,有两个,id_rsa_github.pub和id_rsa_gitee.pub,直接进入目录cat,复制密钥内容,到github和gitee网站内新建ssh公钥,名称自建不限制。
这里有一个坑 我们需要在 ~/.ssh 目录下设置config来设置兼容多个公钥,主要是hostname 和IdentityFile两个属性

Host gitee.com
HostName gitee.com
user git
IdentityFile ~/.ssh/id_rsa_gitee

Host github.com
HostName github.com
user git
IdentityFile ~/.ssh/id_rsa_github

5.新建远程仓库

这部分不赘述,注意的是从2020年4月开始,github把master主分支重新命名为了main主分支,所以默认的新建仓库主分支为main。另外新建远程仓库最好与本地仓库的名称保持一致。

6.绑定远程仓库


$ git remote add 
<remotename> git@github:<username>/<repositoryname>.git

or

$ git remote add
<remotename> git@gitee:<username>/<repositoryname>.git

这里面remotename可以是远程仓库项目名称也可以自己起利于分辨的别名,username是你github或gitee的用户名地址,repositoryname是远程仓库项目名称

可以通过git remote -vv查看所有仓库和关联情况,这是我关联完github和gitee知后的remote情况


$ git remote -vv

7. git push

查看所在分支和远程分支关联


$ git branch
$ git branch -a

查看远程仓库关联


$ git remote -vv

git push执行


$ git push <远程主机名> <本地分支名>:<远程分支名>

例:


$ git push pyP_gitee main:main
$ git push pyP_github main:main


如果本地分支名与远程分支名相同,则main:main可以简写成main

如果绑定的远程仓库是默认仓库可以直接写 git push

屏幕截图 2021-03-22 194756

git插件(pycharm和vsocde)

尽管git bash命令行能满足我们的简单需求,但是大型项目我们需要更便利快速和可视化的git工具

pycharm的git插件

点击参考

file → setting ->plugin 搜索git

安装gitToolBox


pycharm的git插件对新手和个人python开发者来说更直观和可视化,文件变更和branch,remote都很直观,commit和push的时候会自动提示相关信息,新手推荐



vscode的git插件

点击参考

ctrl+shift+x 搜索 git-extension-pack

安装git-extension-pack

因为gitlens和githistory的使用,vscode内登录github可以看到branch和remote的情况,以及file history修改的情况,所以大型项目的git可视化,更推荐vscode的插件。

git bash 与在线练习git命令

对于我们来说windows有git gui小乌龟,对新手也是一种不错的选择,这边不赘述了
git bash不推荐,我们可以用pycharm或vscode内置的terminal来进入git bash
但是首先记住要先cd进入有.git的workspace内,git才被会识别出来。

这里有一个有意思的在线练习git的小网站,推荐一下

参考

预告

下一篇 【GIT】 git进阶 git branch 和 git 工作流 以及gitlab flow

2 个赞

写的很好呀