• git安装配置相关


    Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理。在推出后,Git在其它项目中也取得了很大成功,尤其是在Ruby社区中。目前,包括Rubinius和Merb在内的很多知名项目都使用了Git。Git同样可以被诸如Capistrano和Vlad the Deployer这样的部署工具所使用。同样,eoe.cn客户端的源码也托管在github上。

      

    1 注册账户以及仓库

    要想使用github第一步当然是注册github账号了。之后就可以创建仓库了(免费用户只能建公共仓库),Create a New Repository,填好名称后Create,之后会出现一些仓库的配置信息,这也是一个git的简单教程。

    2配置Git

    首先在本地创建ssh key;
     $ ssh-keygen -t rsa -C "your_email@youremail.com"
    后面的your_email@youremail.com改为你的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。成功的话会在~/下生成.ssh文件夹,进去,打开id_rsa.pub,复制里面的key。

    回到github,进入Account Settings,左边选择SSH Keys,Add SSH Key,title随便填,粘贴key。为了验证是否成功,在git bash下输入:
     $ ssh -T git@github.com  
    如果是第一次的会提示是否continue,输入yes就会看到:You’ve successfully authenticated, but GitHub does not provide shell access 。这就表示已成功连上github。

    接下来我们要做的就是把本地仓库传到github上去,在此之前还需要设置username和email,因为github每次commit都会记录他们。

    $ git config --global user.name "your name"
    $ git config --global user.email "your_email@youremail.com"


    进入要上传的仓库,右键git bash,添加远程地址:
    $ git remote add origin git@github.com:yourName/yourRepo.git 
    后面的yourName和yourRepo表示你再github的用户名和刚才新建的仓库,加完之后进入.git,打开config,这里会多出一个remote “origin”内容,这就是刚才添加的远程地址,也可以直接修改config来配置远程地址。

     3.提交、上传

     以创建一个hello world为例:

    1远端git上建立Repository

    到github首页,点击页面右下角“New Respository”
    
    填写项目信息:
    project name:hello world
    description:my first project
    
    点击“Create Repository” ; 现在完成了一个项目在github上的创建。

    2. 我们需要使用git在本地创建一个相同的项目。

    $ makdir ~/hello-world    //创建一个项目hello-world
    $ cd ~/hello-world    //打开这个项目
    $ git init    //初始化 
    $ touch README
    $ git add README   //更新README文件
    $ git commit -m 'first commit'//提交更新,并注释信息“first commit” 
    $ git remote add origin git@github.com:defnngj/hello-world.git   //连接远程github项目  
    $ git push -u origin master   //将本地项目更新到github项目上去

    ------------------------------------关于可能出现的错误----------------------------------

    github连接出现Bad file number问题

    错误提示:     ssh:connect to host github.com port 22: Bad file number

     

    自己写一个config配置文件(官网上帮助文档如是说),放到RSA相同目录下:

    config:

    Host github.com
    User balfish
    Hostname ssh.github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa
    port 443

    原因:22端口是默认的ssh连接端口,不过貌似这个服务有很多弱点,所以系统默认不开放。那么换一个端口,443端口,它是用来支持https服务的,这个端口默认开放。

    接下来运行ssh -T git@github.com

    再选择yes后在rsa的路径下生成一个known_hosts的文件,打开看了就发现其实就是一个类似cookie的文件。当这个文件存在时以后就不用费劲的输入yes了,直接就连接上了。

    在公司因为用了gitlab和github两个ssh key

    配置github/gitlab 管理多个ssh key :

    FIRST ssh key:

    第一次使用ssh生成key,默认会在用户~(根目录)下生成 id_rsa, id_rsa.pub 2个文件;所以需要添加多个ssh key时也会生成对应的私钥和公钥

    $ ssh-keygen -t rsa -C "youremail@xxx.com"

    在Git Bash中执行这条命令一路回车,会在 ~/.ssh/ 目录下生成 id_rsa 和 id_rsa.pub 两个文件,用文本编辑器将 id_rsa_pub 中的内容复制一下粘贴到github(gitlab)上。

    SECOND ssh key:

    $ ssh-keygen -t rsa -C "youremail2@xxx.com"

    注意不要一路回车,要给这个文件起一个名字, 比如叫 id_rsa_github, 所以相应的也会生成一个 id_rsa_github.pub 文件。

    目录结构:

    config
    id_rsa
    id_rsa.pub
    id_rsa_github
    id_rsa_github.pub
    known_hosts

    修改配置文件:

    # gitlab
    Host gitlab.com
        HostName gitlab.com
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/id_rsa
    
    # github
    Host github.com
        HostName github.com
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/id_rsa_github

    回退:

    case 1: 没有执行git add(改乱了工作区的内容)

    git checkout -- file

    case 2: 执行了git add(改乱了内容还添加到了暂存区)

    step 1: git reset HEAD file
    step 2: git checkout -- file

    case 3:提交了不合适的修改到版本库时,想要撤销本次提交

    git reset --hard commit_id
    git log  #可以查看提交历史,以便确定要回退到哪个版本。
    • HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id

    • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

    git revert 和git reset:

    假设当前有3个commit:

    commit3:  save3  
    commit2:  save2  
    commit1:  save1 

    执行 git revert HEAD xx 之后,会提示提交信息,提交后git  log如下:

    commit4:  Reverts “save2”  
    commit3:  save3  
    commit2:  save2  
    commit1:  save1 

    执行完后,save2被删除了,运行git status,无变化。

    执行 git reset HEAD xx之后,再次看git  log,如下

    commit2:  save2 
    commit1:  save1 

    执行完后,commit3被删除了;但是save3还在本地缓存区,运行git  status,可以看见提示save3可以用git add包含该文件。

    总结:

    1 git revert 是用一次新的commit来回滚之前的commit.git reset是直接删除指定的commit

    2 回滚的这一操作来看,效果差不多.但是在之后merge时候有区别.因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入

    3事实上, git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容

  • 相关阅读:
    c语言 作用域、存储期、链接属性汇总
    进程上下文切换分析
    进程装载过程分析(execve系统调用分析)
    fork 创建进程的过程分析
    系统调用软中断处理程序system_call分析
    linux 系统调用分析
    8分钟带你深入浅出搞懂Nginx
    控制反转
    JAVA泛型(转)
    AOP(转)
  • 原文地址:https://www.cnblogs.com/balfish/p/4051974.html
Copyright © 2020-2023  润新知