zoukankan      html  css  js  c++  java
  • github简单使用教程

    github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开。对于一般人来说公共仓库就已经足够了,而且我们也没多少代码来管理,O(∩_∩)O~。下面是我总结的一些简单使用方法,供初学者参考。

    ~~廖雪峰老师关于git的教程写得很好,可以百度来看看

    1.注册账户以及创建仓库

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

    2.安装客户端msysgit

    github是服务端,要想在自己电脑上使用git我们还需要一个git客户端,我这里选用msysgit,这个只是提供了git的核心功能,而且是基于命令行的。如果想要图形界面的话只要在msysgit的基础上安装TortoiseGit即可。

    装完msysgit后右键鼠标会多出一些选项来,在本地仓库里右键选择Git Init Here,会多出来一个.git文件夹,这就表示本地git创建成功。右键Git Bash进入git命令行,为了把本地的仓库传到github,还需要配置ssh key。

    3.配置Git

    首先在本地创建ssh key;

    1. $ 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下输入:

    1. $ ssh -T git@github.com

    如果是第一次的会提示是否continue,输入yes就会看到:You've successfully authenticated, but GitHub does not provide shell access 。这就表示已成功连上github。

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

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

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

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

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

    4.提交、上传

    接下来在本地仓库里添加一些文件,比如README,

    1. $ git add README
    2. $ git commit -m "first commit"

    上传到github:

    1. $ git push -u origin master

    这里若遇到 non-fast-forward 错误的话,需要这样处理:

    问题(Non-fast-forward)的出现原因在于:git仓库中已经有一部分代码,所以它不允许你直接把你的代码覆盖上去。于是你有2个选择方式:

    1,强推,即利用强覆盖方式用你本地的代码替代git仓库内的内容

    git push -f

    2,先把git的东西fetch到你本地然后merge后再push

    $ git fetch

    $ git merge

    这2句命令等价于

    1. $ git pull  

    可是,这时候又出现了如下的问题:

     

    上面出现的 [branch "master"]是需要明确(.git/config)如下的内容
    [branch "master"]
        remote = origin

        merge = refs/heads/master

    这等于告诉git2件事:

    1,当你处于master branch, 默认的remote就是origin。

    2,当你在master branch上使用git pull时,没有指定remote和branch,那么git就会采用默认的remote(也就是origin)来merge在master branch上所有的改变

    如果不想或者不会编辑config文件的话,可以在bush上输入如下命令行:

    1. $ git config branch.master.remote origin  
    2. $ git config branch.master.merge refs/heads/master  

    之后再重新git pull下。最后git push你的代码吧。it works now~

    git push命令会将本地仓库推送到远程服务器。
    git pull命令则相反。

    修改完代码后,使用git status可以查看文件的差别,使用git add 添加要commit的文件,也可以用git add -i来智能添加文件。之后git commit提交本次修改,git push上传到github。

    5.gitignore文件

    .gitignore顾名思义就是告诉git需要忽略的文件,这是一个很重要并且很实用的文件。一般我们写完代码后会执行编译、调试等操作,这期间会产生很多中间文件和可执行文件,这些都不是代码文件,是不需要git来管理的。我们在git status的时候会看到很多这样的文件,如果用git add -A来添加的话会把他们都加进去,而手动一个个添加的话也太麻烦了。这时我们就需要.gitignore了。比如一般c#的项目我的.gitignore是这样写的:

    1. bin
    2. *.suo
    3. obj

    bin和obj是编译目录,里面都不是源代码,忽略;suo文件是vs2010的配置文件,不需要。这样你在git status的时候就只会看到源代码文件了,就可以放心的git add -A了。

    6.tag

    我们可以创建一个tag来指向软件开发中的一个关键时期,比如版本号更新的时候可以建一个“v2.0”、“v3.1”之类的标签,这样在以后回顾的时候会比较方便。tag的使用很简单,主要操作有:查看tag、创建tag、验证tag以及共享tag。

    6.1查看tag

    列出所有tag:

    1. git tag

    这样列出的tag是按字母排序的,和创建时间没关系。如果只是想查看某些tag的话,可以加限定:

    1. git tag -l v1.*

    这样就只会列出1.几的版本。

    6.2创建tag

    创建轻量级tag:

    1. git tag v1.0

    这样创建的tag没有附带其他信息,与之相应的是带信息的tag:

    1. git tag -a v1.0 -m 'first version'

    -m后面带的就是注释信息,这样在日后查看的时候会很有用,这种是普通tag,还有一种有签名的tag:

    1. git tag -s v1.0 -m 'first version'

    前提是你有GPG私钥,把上面的a换成s就行了。除了可以为当前的进度添加tag,我们还可以为以前的commit添加tag:

    1. #首先查看以前的commit
    2. git log --oneline
    3. #假如有这样一个commit:8a5cbc2 updated readme
    4. #这样为他添加tag
    5. git tag -a v1.1 8a5cbc2

    6.3删除tag

    很简单,知道tag名称后:

    1. git tag -d v1.0

    6.4验证tag

    如果你有GPG私钥的话就可以验证tag:

    1. git tag -v v1.0

    6.5共享tag

    我们在执行git push的时候,tag是不会上传到服务器的,比如现在的github,创建tag后git push,在github网页上是看不到tag的,为了共享这些tag,你必须这样:

    ---------------------------------------------------------------

    1、基础

    • git config --global user.name "Your Name"设置你的仓库用户名(用于标识提交者)
    • git config --global user.email "email@example.com"设置你的仓库邮箱(用于标识提交者)
    • git init 初始化一个git仓库
    • git add --all 添加所有更改的文件
    • git add filename1 当然可以指定添加filename1
    • git commit -m "commit message" 添加更改的信息,必须要有,不然报错,不建议不加。
    • git status 查看git当前状态
    • git diff filename1 查看filename1到底修改了哪些内容
    • git log 查看最近的提交日志
    • git log --pretty=oneline 单行显示提交日志
    • git reset --hard commitID 利用git log得到的commitID返回版本
    • git reset --hard HEAD^回到上一个版本
    • git reflog 查看命令的历史,可以找到git log看不到的commitID,因为git log只显示当前的提交日志,如果你提交了一次,退回版本后又后悔了,就能查看上次提交的commitID
    • git checkout -- filename1 利用版本库中的版本替换工作区中的文件。功能有2:
      • 撤销文件修改,分两种情况:
        • 撤销工作区中的修改(没有使用git add命令添加到暂存区)
        • 撤销暂存区中的修改(添加到了暂存区又做了修改)
      • 找回删除的文件
        • 工作区中文件误删了,可以通过此命令从版本库中找回
    • git reset HEAD filename1 撤销add,回到工作区
    • git rm filename1 删除文件
    • git remote add origin https://github.com/pengloo53/learngit.git 将本地库关联到github远程库上
    • git push -u origin master 第一次推送的时候要加上-u参数,可以将本地库的master分支与远程库的master分支关联起来;下次提交就不需要加-u了。
    • git clone https://github.com/pengloo53/learngit.git 克隆远程库到本地

    2、分支管理

    • git checkout -b dev创建dev分支并切换到dev。相当于git branch devgit checkout dev两条命令。
    • git branch查看当前分支
    • git merge dev合并指定分支到当前分支,如,你现在master分支,那么执行命令就将dev分支合并到了master分支上。
    • git branch -d dev删除dev分支
    • git log --graph --pretty=oneline --abbrev-commit查看分支合并图
    • git merge --no-ff -m "merge with no-ff" dev禁用「Fast forward」,也就是保留分支的相关信息。
    • git stash 将工作区现场储藏起来,等以后恢复后继续工作。通常用于处理更为着急的任务时,例如:bug。
    • git stash list 查看保存的工作现场
    • git stash apply恢复工作现场
    • git stash drop 删除stash内容
    • git stash pop 恢复的同时直接删除stash内容
    • git stash apply stash@{0} 恢复指定的工作现场,当你保存了不只一份工作现场时。
    • git branch -D feature-vulcan 强行删除分支。用于不需要合并,就地删除的情况。
    • git remote 查看远程库的信息,一般返回origin。
    • git remote -v 查看远程库的详细信息。
    • git push origin master 将本地master分支推送到远程master分支。
      • master分支为主分支,因此要时刻与远程同步;
      • dev分支为开发分支,团队成员都需要在上面工作,所以也需要与远程同步;
      • bug分支只用于在本地修复bug,没有必要推送到远程;
      • feature新功能分支是否推送到远程,取决于你是否和其他人合作在上面开发。
    • git clone https://github.com/pengloo53/learngit.git 将远程库克隆到本地,默认只能看到master分支。
    • git checkout -b dev origin/dev 创建远程dev分支到本地
    • git pull 将远程分支的最新内容抓取下来。
    • git branch --set-upstream dev origin/dev将本地dev分支与远程dev分支之间建立链接。
    多人协作工作模式
    1. 首先,可以试图用git push origin branch-name推送自己的修改;
    2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并(如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name);
    3. 如果合并有冲突,则解决冲突,并在本地提交;
    4. 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!

    3、标签管理

    • git tag v1.0 给当前分支打上标签
    • git tag 查看所有的标签,按时间顺序列出。
    • git log --pretty=oneline --abbrev-commit缩略commitID并单行显示提交信息
    • git tag v0.9 commitID通过上一条命令查看commitID,然后打上标签。用于忘记打标签的情况,因为标签其实就是只想某个commitID的指针,默认情况下,标签打在最新的提交上。
    • git show v0.9 查看标签信息。
    • git tag -a v0.1 -m "version 0.1 released" commitID创建带有说明的标签,-a指定标签名,-m指定说明文字。
    • git tag -d v0.1 删除标签v0.1
    • git push origin v1.0 推送标签1.0到远程
    • git push origin --tags 推送所有的标签到远程
    • git push origin :refs/tags/v0.9 删除远程标签,但是前提是要先在本地删除对应标签。

    4、自定义Git

    • git config --global color.ui true 让Git显示颜色
    • .gitignore在这个文件里编辑你要忽略的文件,并提交到Git中,就可以忽略特殊文件的检查。如将*.db写入.gitignore文件中,将忽略所有db文件。可以参考github收集的所有.gitignore
    • git config --global alias.st status将status的别名设置成st,那么git st=git status
    • git config --global alias.unstage 'reset HEAD' 那么git reset HEAD filename=git unstage filename
    • git config --global alias.last 'log -1' 敲git last就显示最后一次提交了。

    5、搭建Git服务器

    1. sudo apt-get install git 安装Git;
    2. sudo adduser git 添加Git用户;
    3. sudo git init --bare sample.git 初始化git仓库;
    4. sudo chown -R git:git sample.git修改仓库的所属用户为git;
    5. 将git用户的信息git:x:1001:1001:,,,:/home/git:/bin/bash改成git:x:1001:1001:,,,:/home/git:/bin/git-shell,为了禁用shell登录。
    6. git clone git@server :/director/sample.git 克隆Git服务器上的仓库
  • 相关阅读:
    java cp命令
    Ubuntu相关IP配置(转)
    (转)Linux操作系统下VMware的多网卡桥接转换
    Linux问题FAQ1
    hadoop运行常见问题FAQ
    hadoop运行故障问题解决1——datanode节点启动后自动关闭
    Java程序设计9——泛型
    一道灵活的css笔试题
    inherit与auto
    再谈visibility:hidden和display:none
  • 原文地址:https://www.cnblogs.com/stephenykk/p/3833169.html
Copyright © 2011-2022 走看看