zoukankan      html  css  js  c++  java
  • Git

    下载安装

    配置

    本地创建ssh key

    ssh-keygen -t rsa -C "your_email@example.com" 
    

    输入注册的邮箱,之后要求确认路径和输入密码。成功会在~/下生成.ssh文件夹,进去,打开id_rsa.pub,复制里面的key
    在github上,进入Account Settings(账户配置),左边选择SSH Keys,Add SSH Key,title填上,粘贴在你电脑上生成的key
    验证是否成功,在git bash下输入:

    ssh -T git@github.com
    

    You've successfully authenticated, but GitHub does not provide shell access 。这就表示已成功连上github

    id_rsa文件时私有密钥,id_rsa.pub是公开密钥

    然后
    本地仓库上传,需要先设置username和email,因为github每次commit都会记录他们

    git config --global user.name "Firstname Lastname"
    git config --global user.email "your_email@example.com"
    

    这个命令,会在“~/.gitconfig ”中以一下形式输出设置文件

    [user]
    name = Firstname Lastname
    email =your_email@example.com
    

    想要更改这些信息时,可以直接编辑这个设置文件

    进入要上传的仓库,右键git bash,添加远程地址

    git remote add origin git@github.com:yourName/yourRepo.git
    

    yourName和yourRepo表示在github的用户名和仓库,加完之后进入.git,打开config,这里会多出一个remote "origin"内容,这就是刚才添加的远程地址,也可以直接修改config来配置远程地址
    创建新文件夹,打开,然后执行 git init 以创建新的 git 仓库

    检出仓库

    执行如下命令以创建一个本地仓库的克隆版本:

    git clone /path/to/repository 
    

    如果是远端服务器上的仓库,命令会是这个样子:

    git clone username@host:/path/to/repository
    

    提高命令输出的可读性

    将color.ui设置为去偷可以让命令的输出拥有更高的可读性。

    git config --global color.ui auto
    

    "~/.gitconfig"中会增加一行
    [color]
    ui = auto

    GitHub上的头像时通过Gravatar服务显示的。使用过WordPress可能对它有所了解。

    许可协议

    在GitHub上公开了源代码,也不代表著作者放弃了著作权等权利。代码的权利持有人请选择合适的许可协议。在GitHub上,有修正BSD许可协议、Apache许可协议等多种许可协议供人们选择,不过大多数软件都是用MIT许可协议。MIT的内容可依照著作权者的需求更改内容。MIT许可协议可与其他许可协议并存。MIT条款也是自由软件基金会(FSF)所认可的自由软件许可协议条款,与GPL兼容。
    
    实际使用时,只需将LICENSE文件加入仓库,并在README.md文件中声明使用了何种许可协议即可。
    

    工作流

    本地仓库由 git 维护的三棵"树"组成。
    第一个是 工作目录,它持有实际文件;
    第二个是 暂存区(Index),它像个缓存区域,临时保存改动;
    最后是 HEAD,它指向最后一次提交的结果

    可以提出更改(把它们添加到暂存区),使用如下命令

    git add <filename>
    git add *
    

    使用如下命令以实际提交改动

    git commit -m '提交信息'
    

    现在,改动已经提交到了 HEAD,但是还没到远端仓库

    推送改动

    执行如下命令以将这些改动提交到远端仓库

    git push origin master
    

    可以把 master 换成你想要推送的任何分支

    如果还没有克隆现有仓库,并欲将仓库连接到某个远程服务器,可以使用如下命令添加

    git remote add origin <server>
    

    这样就能够将改动推送到所添加的服务器上去了

    初始化

    git init
    

    Git 使用 git init 命令来初始化一个 Git 仓库
    该命令执行完后会在当前目录生成一个 .git 目录

    git init newrepo
    

    使用指定目录作为Git仓库.初始化后,会在 newrepo 目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。

    git add *.c
    git add README
    git commit -m '初始化项目版本'
    

    以上命令将目录下以 .c 结尾及 README 文件提交到仓库中

    git clone <repo>
    

    从现有 Git 仓库中拷贝项目

    git clone <repo> <directory>
    

    克隆到指定的目录
    repo:Git仓库
    directory:本地目录

    git ststus -s
    

    git status 命令用于查看项目的当前状态

    git add README hello.php
    

    添加文件

    git add .
    

    添加所有文件

    修改README文件
    执行'git status -s'
    A表示已添加
    AM状态表示,这个文件在我们将它添加到缓存之后又有改动

    'git status'查看详细内容
    '-s' 参数,简短信息输出

    git diff
    

    查看执行 git status 的结果的详细信息
    git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别
    两个主要的应用场景:
    未缓存的改动:'git diff'
    查看已缓存的改动: 'git diff --cached'
    查看已缓存的与未缓存的所有改动:'git diff HEAD'
    显示摘要而非整个 diff:'git diff --stat'

    git commit
    

    使用 git add 命令将想要快照的内容写入缓存区, 而执行 git commit 将缓存区内容添加到仓库中
    在此之前要配置名字与电子邮箱地址,Git 为你的每一个提交都记录你的名字与电子邮箱地址

    git config --global user.name 'test'
    git config --global user.email test@test.com
    
    
    
    git commit -m '第一次版本提交'
    

    使用 -m 选项以在命令行中提供提交注释
    如果你没有设置 -m 选项,Git 会尝试为你打开一个编辑器以填写提交信息。 如果 Git 在你对它的配置中找不到相关信息,默认会打开 vim

    git commit -a
    

    用 -a 选项跳过git add这一步

    再次修改一下hello.php

    git commit -am '修改 hello.php 文件'
    
    
    
    git reset HEAD
    

    用于取消已缓存的内容

    改动README,hello.php
    两个文件修改后,都提交到了缓存区,现在要取消其中一个的缓存,操作如下:
    '''
    $ git status -s
    M README
    M hello.php
    $ git add .
    $ git status -s
    M README
    M hello.php
    $ git reset HEAD hello.php
    Unstaged changes after reset:
    M hello.php
    $ git status -s
    M README
    M hello.php
    '''
    执行 git commit,只会将 README 文件的改动提交,而 hello.php 是没有的
    可以使用以下命令将 hello.php 的修改提交:

    git commit -am '修改hello.php'
    
    git status
    

    简而言之,执行 git reset HEAD 以取消之前 git add 添加,但不希望包含在下一提交快照中的缓存

    如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 Changes not staged for commit 的提示。
    要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除,然后提交。可以用以下命令完成此项工作

    git rm <file>
    

    如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f

    git rm -f <file>
    

    如果把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可

    git rm --cached <file>
    

    递归删除,即如果后面跟的是一个目录做为参数,则会递归删除整个目录中的所有子目录和文件:

    git rm -r *
    

    'git mv'用于移动或重命名一个文件、目录、软连接

    git mv README README.md
    

    分支管理

    创建分支

    git branch (branchname)
    

    除非你将分支推送到远端仓库,不然该分支就是 不为他人所见的

    git push origin <branch>
    

    切换分支

    git checkout (branchname)
    

    切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录

    合并分支

    git merge
    

    更新与合并

    更新本地仓库至最新改动:

    git pull
    

    在你的工作目录中 获取(fetch) 并 合并(merge) 远端的改动

    要合并其他分支到你的当前分支:

    git merge <brancu>
    

    在这两种情况下,git 都会尝试去自动合并改动。遗憾的是,这可能并非每次都成功,并可能出现冲突(conflicts)。 这时候就需要你修改这些文件来手动合并这些冲突(conflicts)。改完之后,你需要执行如下命令以将它们标记为合并成功:

    git add <filename>
    

    在合并改动之前,可以使用如下命令预览差异:
    git diff <source_branch> <target_branch>

    分支管理

    列出分支

    git branch
    

    有一个叫做"master"的分支,并且该分支是当前分支
    执行 git init 的时候,缺省情况下 Git 就会为你创建"master"分支

    git checkout -b (branchname)
    

    创建新分支并立即切换到该分支下

    删除分支

    git branch -d(branchname)
    

    合并冲突

    可以用 git add 要告诉 Git 文件冲突已经解决

    查看提交历史

    git log
    

    可以用 --oneline 选项来查看历史记录的简洁的版本

    git log --oneline
    

    可以用 --graph 选项,查看历史中什么时候出现了分支、合并。以下为相同的命令,开启了拓扑图选项:

    git log --oneline --graph
    

    可以用 '--reverse'参数来逆向显示所有日志

    git log --reverse  --oneline
    

    查找指定用户的提交日志可以使用命令:git log --author

    git log --author=XiaoMing --oneline --5
    

    要指定日期,可以执行几个选项:--since 和 --before,但是也可以用 --until 和 --after

    git log --oneline --before={3.weeks.ago} --after={2019-05-02} --no-merges
    

    三周前且在5月2日之后的所有提交(还用了 --no-merges 选项以隐藏合并提交)

    Git 标签

    如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签

    git tag -a v1.0
    

    -a 选项意为"创建一个带注解的标签"

    执行 git log --decorate 时,可以看到标签

    git log --oneline --decorate --graph
    

    忘了给某个提交打标签,又将它发布了,可以给它 追加标签

    git tag -a v1.0 
    

    查看所有标签

    git tag
    

    指定标签信息

    git tag -a <tagname> -m "test标签"
    

    PGP签名标签命令

    git tag -s <tagname> -m "test标签"
    

    替换本地改动

    假如操作失误(这最好永远不要发生),可以使用如下命令替换掉本地改动:

    git chekout --<filename>
    

    此命令会使用 HEAD 中的最新内容替换掉你的工作目录中的文件。已添加到暂存区的改动以及新文件都不会受到影响。

    假如想丢弃在本地的所有改动与提交,可以到服务器上获取最新的版本历史,并将本地主分支指向它:

    git fetch origin
    git reset --hard origin/master
    

    远程仓库

    github
    查看当前配置有哪些远程仓库

    git remote
    git remote -v
    

    加上 -v 参数,可以看到每个别名的实际链接地址

    提取远程仓库

    从远程仓库下载新分支与数据

    git fetch
    

    该命令执行完后需要执行git merge 远程分支到所在的分支

    从远端仓库提取数据并尝试合并到当前分支

    git merge
    

    在执行 git fetch 之后紧接着执行 git merge 远程分支到你所在的任意分支
    假设配置好了一个远程仓库,并且想要提取更新的数据,可以首先执行 git fetch [alias] 告诉 Git 去获取它有你没有的数据,然后你可以执行 git merge [alias]/[branch] 以将服务器上的任何更新(假设有人这时候推送到服务器了)合并到你的当前分支

    在线修改,本地更新

    git fentch origin
    
    git merge origin/master
    

    推送到远程仓库

    推送新分支与数据到某个远端仓库命令

    git push [alias] [branch]
    

    删除远程仓库

    git remote rm [别名]
    

    添加仓库 origin2

    git remote add origin2 git@github.com:yourname/yourrepo.git
    

    删除仓库 origin2

    git remote rm origin2
    git remote -v
    

    使用 CODING 仓库

    国内用户 GitHub 的访问速度太慢。腾讯云开发者平台。除了提供免费的 Git 仓库之外,免费的私有仓库(免费的普通会员提供 10 个私有项目、512M Git 仓库容量)
    将 GitHub 上的代码迁移到 CODING。通常,分为三步:
    1、创建 CODING 项目
    2、将 GitHub 代码 Pull 到本地
    登录 GitHub 选择你想要导入的仓库并复制仓库地址,在本地执行命令,将 GitHub 仓库代码拉下来
    3、本地关联 CODING 仓库,Push 代码到 CODING

    git remove -v
    sudo git remote rm origin
    sudo git remotre add origin https://git.codng.net/xxx/xxx.git
    sudo git push -u origin master
    

    之后,再次进入 CODING 项目中代码管理的页面,便可以看到刚才 Push 上去的代码了。至此、GitHub 上的项目已经完整迁移到了 CODING 平台

    CODING 仓库的免密码 Push/Pull
    代码迁移到 CODING 之后,我们发现,每次 Push/Pull 代码的时候都会提示我们输入用户名和密码。这是因为,我们的项目还没有添加 SSH Key,只能通过用户名/密码验证。 而 CODING 是为我们提供了公钥验证的方式的,进入项目管理,在左侧选项卡中点击"公钥部署"按钮,然后点击右侧的"新建公钥部署"
    将本地的公钥内容粘贴到对应位置,并且给公钥命名一下...
    勾选"授予推送权限"则可以授予这台机器Push代码的权限。
    保存好设置后,再次尝试。此时,Push/Pull 代码不在需要验证用户名密码。至此,代码便完全托管在了 CODING 平台上

    Git服务器搭建

    搭建一台Git服务器作为私有仓库使用。其他人看不到这个项目
    以 Centos 为例搭建 Git 服务器

    安装Git

    yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
    yum install git
    

    创建一个git用户组和用户,用来运行git服务

    groupadd git
    useradd git -g git
    

    创建证书登录

    收集所有需要登录的用户的公钥,公钥位于id_rsa.pub文件中,把我们的公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
    如果没有该文件创建它:

    cd /home/git/
    mkdir /ssh
    chmod 755 .ssh
    touch .ssh/authorized_keys
    chmod 644 .ssh/authorized_keys
    

    初始化Git仓库

    首先选定一个目录作为Git仓库,假定是/home/gitrepo/test.git,在/home/gitrepo目录下输入命令:

    cd /home
    mkdir gitrepo
    chown git:git gitrepo/
    cd gitrepo
    git init --bare test.git
    

    以上命令Git创建一个空仓库,服务器上的Git仓库通常都以.git结尾。然后,把仓库所属用户改为git:

    chown -R git:git test.git
    

    克隆仓库

    git clone git@192.168.x.x:/home/gitrepo/test.git
    

    192.168.x.x为 Git 所在服务器 ip
    Git 服务器安装完成

    ~

    内建的图形化git:

    gitk
    

    彩色git输出:

    git config color.iu true
    

    显示历史记录时,每个提交的信息只显示一行:

    git config format.pretty oneline
    

    交互式添加文件到暂存区:

    git add -i
  • 相关阅读:
    webpack基础
    LeetCode232. 用栈实现队列做题笔记
    mysql 时间加减一个月
    leetcode 1381. 设计一个支持增量操作的栈 思路与算法
    LeetCode 141. 环形链表 做题笔记
    leetcode 707. 设计链表 做题笔记
    leetcode 876. 链表的中间结点 做题笔记
    leetcode 143. 重排链表 做题笔记
    leetcode 1365. 有多少小于当前数字的数字 做题笔记
    LeetCode1360. 日期之间隔几天 做题笔记
  • 原文地址:https://www.cnblogs.com/OceanF/p/10803731.html
Copyright © 2011-2022 走看看