Git 工具使用

详细见:

Git-菜鸟教程

Git 简明指南

Git和 SVN 区别


1、Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,最核心的区别。

2、Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。

3、Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。

4、Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。

5、Git 的内容完整性要优于 SVN:Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

安装


安装包下载地址
百度云链接 提取码: ette

Git工作流程


  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫stage, 或index。一般存放在 ".git目录下" 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。像缓存区域,临时保存改动。
  • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

HEAD实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。

当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

"git reset HEAD":暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

"git rm --cached ":会直接从暂存区删除文件,工作区则不做出改变。

"git checkout ." 或者 "git checkout -- " :会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。

"git checkout HEAD ." 或者 "git checkout HEAD ":会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为会清除工作区和暂存区中中未提交的改动。

Git的使用


常规流程


1.Git账号信息配置

git config --global user.name zyx-pt

git config --global user.email zyx_pt@163.com

2.用命令git clone从远程库克隆

git clone https://github.com/zyx-pt/GitTest

在克隆时需要验证github账户,完成后项目下有一个隐藏的.git目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

3.添加和提交

git add *

git commit -m "代码提交信息"

4.推送改动

改动已经在本地库的HEAD了,提交到远端仓库

git push origin master

查看github上,发现提交上去新的文件

本地创建仓库,没有克隆现有仓库,推送到远程仓库


git init

git add -A

git commit -m "提交的信息说明"

git remote add origin

git pull origin master

git push origin master

如果本地的文件路径与远程仓库一致,则不会失败,否则会报以下错误

解决方法:

1.使用强制push的方法:

git push -u origin master -f

这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候

2.push前先将远程repository修改pull下来

git pull origin master

git push -u origin master

3.若不想merge远程和本地修改,可以先创建新的分支,再push到新分支

git branch [name]

git push -u origin [name]

删除远程仓库里误上传的文件


进入其所在目录,可以用dir命令查看

删除远程仓库上的target文件夹:

git rm -r --cached target

git commit -m "删除远程仓库上的target文件夹"

git push -u origin master

提交忽略不必要的文件或文件夹


.gitignore文件,这个文件的作用就是告诉Git哪些文件不需要添加到版本管理中

要养成在项目开始就创建.gitignore文件的习惯,否则一旦push,需要另行处理

1.添加.gitignore文件

touch .gitignore

2.编辑 .gitignore文件

使用notepad++编辑

vim .gitignore :命令编辑(enter进入编辑,esc退出编辑,shift + zz保存退出编辑)

常用的规则:

/target/ 忽略根目录下文件夹

target/ 忽略目录下/target/,可以是子目录下的/child/target/

.zip 忽略所有.zip文件,表示匹配任意字符

/mtk/do.c 忽略某个文件夹下具体文件

!*.java !开头表示不忽略

day_1?.txt ?表示匹配一个字符

*.[oa] 支持通配符:忽略所有以.o或者.a为扩展名的文件

hello[0-9].txt[] 表示匹配中括号内的单个字符:可以使用-来表示连贯的字符,比如0-9,a-z,A-Z等,[0-9]表示匹配从0到9的单个字符。可以使用来表示除外,比如[0-9]表示除0到9之外的单个字符。

3.解决修改.gitignore规则不生效

在创建.gitignore文件之前就push了项目,那么即使你在.gitignore文件中写入新的过滤规则,这些规则也不会起作用,Git仍然会对所有文件进行版本管理。

.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:

git rm -r --cached .

git add .

git commit -m 'update .gitignore'

GitHub配置SSH


1、Git的user name和email设置

git config --global user.name "xxxx" git config --global user.email "xxxx@163.com"

2、使用你注册github的邮箱生成秘钥

ssh-keygen -t rsa -C "xxxx@163.com"

中间连续3次Enter键

.ssh目录会生成id_rsa和id_rsa.pub两个文件,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心使用

3、在GitHub的账户添加SSH Key,Setting==》SSH and GPG keys,GitHub才能根据此进行加密解密,从而判断此提交是由你本人操作。

4、测试SSH key是否设置成功

ssh -T git@github.com

The authenticity of host 'github.com (192.30.253.113)' can't be established. RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8. Are you sure you want to continue connecting (yes/no)? yes

是否继续连接?输入 yes

输出如下,则表示通过

Hi xxxx! You've successfully authenticated, but GitHub does not provide shell access.

posted @ 2020-04-09 18:33  Y永ong  阅读(322)  评论(0编辑  收藏  举报