zoukankan      html  css  js  c++  java
  • Git (一)预设环境和免密登录

    背景


      一直用的svn,这段时间换了之后才发现git的强大功能。缺点就是可能上手比较难一点。
    接下来就带你Git入门

    Git是什么?

    Git是目前世界上最先进的分布式版本控制系统

    Git有什么特点?好用,好用

    那什么是版本控制系统?版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理

    安装

    可以到官网Git查看相关信息

    或者可以在GitHub上查看

    官网有很详细的安装教程

    二进制安装

    二进制最新版下载地址

    或者在GitHub下载

    #开始安装
    $ tar -zxf git-2.0.0.tar.gz
    $ cd git-2.0.0
    $ make configure
    $ ./configure --prefix=/usr
    $ make all doc info
    $ sudo make install install-doc install-html install-info
    
    #当你安装完后,可以使用git命令来测试
    $ git clone git://git.kernel.org/pub/scm/git/git.git

    yum安装

    $ yum install git -y

    yum安装的配置文件  ~/.gitconfig 针对当前用户

     

    设定Git

     安装好Git后,我们就可以进行初始化环境了

    设定好的预设环境(Git账号地址)

    Git附带有一个git config 的工具,我们可以随时随意修改预设配置

    1. /etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。

    2. ~/.gitconfig~/.config/git/config 文件:只针对当前用户。 可以传递 --global 选项让 Git 读写此文件。

    3. 当前使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库。

    每一个级别覆盖上一级别的配置,所以 .git/config 的配置变量会覆盖 /etc/gitconfig 中的配置变量。

    config help

    [root@Git ~]# git --help
    用法:git [--version] [--help] [-c name=value]
               [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
               [-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
               [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
               <command> [<args>]
    
    最常用的 git 命令有:
       add        添加文件内容至索引
       bisect     通过二分查找定位引入 bug 的变更
       branch     列出、创建或删除分支
       checkout   检出一个分支或路径到工作区
       clone      克隆一个版本库到一个新目录
       commit     记录变更到版本库
       diff       显示提交之间、提交和工作区之间等的差异
       fetch      从另外一个版本库下载对象和引用
       grep       输出和模式匹配的行
       init       创建一个空的 Git 版本库或重新初始化一个已存在的版本库
       log        显示提交日志
       merge      合并两个或更多开发历史
       mv         移动或重命名一个文件、目录或符号链接
       pull       获取并合并另外的版本库或一个本地分支
       push       更新远程引用和相关的对象
       rebase     本地提交转移至更新后的上游分支中
       reset      重置当前HEAD到指定状态
       rm         从工作区和索引中删除文件
       show       显示各种类型的对象
       status     显示工作区状态
       tag        创建、列出、删除或校验一个GPG签名的 tag 对象
    
    命令 'git help -a' 和 'git help -g' 显示可用的子命令和一些指南。参见
    'git help <命令>' 或 'git help <指南>' 来查看给定的子命令帮助或指南。

    用户信息

    当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改:

    $ git config --global user.name "John Doe"
    $ git config --global user.email johndoe@example.com

    再次强调,如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global 选项的命令来配置。

    文本编辑器

    既然用户信息已经设置完毕,你可以配置默认文本编辑器了,当 Git 需要你输入信息时会调用它。 如果未配置,Git 会使用操作系统默认的文本编辑器,通常是 Vim。 如果你想使用不同的文本编辑器,例如 Emacs,可以这样做:

    $ git config --global core.editor emacs

    Warning

    Vim 和 Emacs 是像 Linux 与 Mac 等基于 Unix 的系统上开发者经常使用的流行的文本编辑器。 如果你对这些编辑器都不是很了解或者你使用的是 Windows 系统,那么可能需要搜索如何在 Git 中配置你最常用的编辑器。 如果你不设置编辑器并且不知道 Vim 或 Emacs 是什么,当它们运行起来后你可能会被弄糊涂、不知所措。

    检查配置信息

    如果想要检查你的配置,可以使用 git config --list 命令来列出所有 Git 当时能找到的配置。

    $ git config --list
    user.name=John Doe
    user.email=johndoe@example.com
    color.status=auto
    color.branch=auto
    color.interactive=auto
    color.diff=auto
    ...

    你可能会看到重复的变量名,因为 Git 会从不同的文件中读取同一个配置(例如:/etc/gitconfig~/.gitconfig)。 这种情况下,Git 会使用它找到的每一个变量的最后一个配置。

    你可以通过输入 git config <key>: 来检查 Git 的某一项配置

    $ git config user.name
    John Doe

    --取自Git-前的配置

    预设后就可以使用功能Git了,但是还有个很烦的问题

    每次push,pull都需要输入用户名密码,简直就是浪费生命

    Git免密登录

    1. 使用全局命令定义密码保存
    2. 手动生成密码文件(也可以使用push或pull再次输入密码会自动生成在~/.git-credentials
    #使用全局命令
    [root@Git ~]# git config --global credential.helper store
    
    #生成账户密码保存文件
    [root@Git ~]# echo "https://username:password@email" > ~/.git-credentials
    
    #查看gitconfig
    [root@Git ~]# cat .gitconfig 
    [user]
    	name = username
    	email = email
    [credential]
    	helper = store
    

    在使用可以看到~/.gitconfig文件,会多了一项:

    [credential]
        helper = store

    再次使用push或pull已经不需要密码了

    但是也可以看到这个密码文件明文的哦,不安全

    目测密文拿走了还是不安全。因为对称加密里面没有随机数。

    如果真想安全可以考虑使用使用ssh的方式进行认证,然后用RSA非对称加密

    使用ssh认证方式连接GitHub

    GitHub默认使用https

    当然也提供了ssh认证方式

    查看当前使用模式

    [root@Git ~]# git remote -v
    origin	https://github.com/Nedved-liao/kubernetes.1.30_CN (fetch)
    origin	https://github.com/Nedved-liao/kubernetes.1.30_CN (push)
    

    命令移除HTTPS的方式

    git remote rm origin

    [root@Git ~]#git remote rm origin

    添加SSH认证方式

    git remote add origin Git地址

    [root@Git ~]#git remote add origin git@github.com:Nedved-liao/kubernetes.1.30_CN.git
    

    查看结果

    [root@Git ~]#git remote -v
    origin	git@github.com:Nedved-liao/kubernetes.1.30_CN.git (fetch)
    origin	git@github.com:Nedved-liao/kubernetes.1.30_CN.git (push)
    


    尝试push一下,

    Please make sure you have the correct access rights
    and the repository exists.

    [root@Git ~]# git push origin master
    Warning: Permanently added 'github.com,13.250.177.223' (RSA) to the list of known hosts.
    Permission denied (publickey).
    fatal: Could not read from remote repository.
    
    Please make sure you have the correct access rights
    and the repository exists.
    

    使用 ssh-keygen -t rsa -C "GitHubusername"命令生成公钥,

    公钥保存路径可以自定义(默认/root/.ssh/id_rsa)

    Enter file in which to save the key (/root/.ssh/id_rsa):      //在这填写的自定义路径

    Enter passphrase  //输入你自定义密码

    Enter same passphrase again:  //再次输入

    [root@Git ~]#  ssh-keygen -t rsa -C "Nedved-liao" 
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /root/.git_rsa.
    Your public key has been saved in /root/.git_rsa.pub.
    The key fingerprint is:
    SHA256:Xy2URzaPQceBAFZ8j7MvGARI3KH4ZvtSiRZdwd7J4d8 Nedved-liao 
    The key's randomart image is:
    +---[RSA 2048]----+
    |      o.o+*+o.Boo|
    |      .ooo + B *.|
    |     . .. + B B .|
    |      .. . + X . |
    |       +S o o = .|
    |      oo.+ o o .E|
    |      ... . o .  |
    |       ..  . . . |
    |        ..    .  |
    +----[SHA256]-----+
    

    进入GitHub页面

    setting-SSH AND GPG KEY

    获取刚才生成的公钥信息先

    [root@Git ~]# cat /root/.ssh/id_rsa.pub
    ssh-rsa AAAAwezaC1yc2EAAAADAQABAAABAQDSorEvBERVenonyrxYWJP2iX2WXRvjssxFZh54RFYYVHMEg0MYuVDaITrOhCHcVPl04Ve5bDQCkVgzzixh12wriaoCPRuEsihz429sgxCyWZgw9284czkd2pNN1WsZ3lx14c+cdHmN2aoIAAuwubTUrBM2MKcTc+JG6YbY8Fd/fDAohwejMkxJ46AULsj1e8J8xdo8OyMniX9A4aHlwewg1dwerLB9n12JsyIZOqkFjQdbHt2qKTQBfIYx712bExBDPbv9zwerJL31pVsQpGCcUGwwYj5EtizjruJFEBD6kkH8+6ezLbDKPWXlgdWmHdjYrfItYjFZ9r7ez2Krwwqun Nedved-liao?
    

     点击New ssh key 填写信息,把刚才cat 出来的信息全部复制粘贴到Key栏

    点击add ssh key

     再次使用git 拉取GitHub代码就不需要密码啦

  • 相关阅读:
    python3 TypeError: a bytes-like object is required, not 'str'
    Centos 安装Python Scrapy PhantomJS
    Linux alias
    Vim vimrc配置
    Windows下 Python Selenium PhantomJS 抓取网页并截图
    Linux sort
    Linux RSync 搭建
    SSH隧道 访问内网机
    笔记《鸟哥的Linux私房菜》7 Linux档案与目录管理
    Tornado 错误 "Global name 'memoryview' is not defined"
  • 原文地址:https://www.cnblogs.com/Nedved/p/10472415.html
Copyright © 2011-2022 走看看