zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    从0开始用Hexo框架搭建个人博客(无坑版)
    Appium常用操作之「Toast提示信息获取」
    Appium常用操作之「微信滑屏、触屏操作」
    Appium常用操作之「元素定位、swipe 滑屏操作」
    Python+Appium运行简单的demo,你需要理解Appium运行原理!
    磁盘管理综合测试题
    自总结笔记01(第一章---第七章)
    linux里配置静态ip
    chapter06
    chapter05
  • 原文地址:https://www.cnblogs.com/zhengyongxian/p/12600260.html
Copyright © 2011-2022 走看看