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
  • 相关阅读:
    [apue] FIFO:不是文件的文件
    [apue] 等待子进程的那些事儿
    [apue] popen/pclose 疑点解惑
    [apue] 使用 popen/pclose 的一点疑问
    [apue] 使用 poll 检测管道断开
    [apue] dup2的正确打开方式
    [apue] 管道原子写入量的一个疑问
    [apue] 测试管道容量的一些疑问
    【新阁教育】再也不用担心我的PLC通信不上了
    【新阁教育】三菱PLC的这个功能,真的很强大
  • 原文地址:https://www.cnblogs.com/OceanF/p/10803731.html
Copyright © 2011-2022 走看看