码迷,mamicode.com
首页 > 其他好文 > 详细

浅谈github

时间:2015-09-09 19:48:47      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:github

1.CVS&SVN:集中式版本控制系统(速度慢,联网使用),免费。

  VSS:微软集中式版本控制系统,集成在Visual Studio中

  ClearCase:IBM公司收费集中式版本控制系统,安装比Windows还大,前身Rational

2. Git:分布式版本控制系统,不必联网使用,分支管理,开源

3.GitHub:2008年网站上线,开源项目免费提供Git存储. 无数开源项目迁移至GitHub,包括jQuery,PHP,Ruby等。

4.集中式版本控制系统:版本库集中存放在中央服务器,联网才能工作

  分布式版本控制系统:每个人电脑上都是一个完整的版本库,安全性高。

                                   通常也有一台充当“中央服务器”,为交换修改方便。

5.版本库(repository):目录内所有文件都可以被Git管理,

                     每个文件的修改、删除,Git都能跟踪,可还原。

   Linux下创建版本库:

        (1)创建目目录:如/git

       (2)git init 命令:把这个目录变成Git可以管理的仓库

      Initialized empty Git repository in /git/.git/

     当前目录多出来.git目录:Git来跟踪管理版本库的,隐藏目录

       (3)把文件添加到版本:

编辑.txt文件,放置所创建的目录下

               git add file:把文件修改添加到暂存区

               git commit –m “提交说明” :把暂存区的所有内容提交到当前分支

        add和commit:commit一次可以提交多个add不同文件

6.所有的版本控制系统,其实只能跟踪文本文件的改动,无法跟踪图片视屏等二进制文件

Microsoft的Word格式是二进制格式,无法跟踪Word文件的改动

7.不要使用Windows自带的记事本编辑任何文本文件。因为Microsoft保存UTF-8编码的文件在每个文件开头添加了0xefbbbf(十六进制)的字符,可能会导致编译报错等错误

8.git status:查看仓库当前状态

9.git diff:查看不同,显示的格式是Unix通用的diff格式

10.git log:显示从最近到最远的提交日志.

git log  --pretty=oneline 在一行显示

11.commit id(版本号):一大串类似36281...882e1e0,SHA1计算出来的十六进制表示数字

12.git reset --hard HEAD^:回到上一个版本

   git reset –hard commit_id: 回到指定版本

                  HEAD^:上一个版本

                  HEAD^^:上上一个版本

                 HEAD~100:往上100个版本

13. Git的版本回退速度快:内部有个指向当前版本的HEAD指针移动

14.git reflog:记录每一次命令

15.工作区(Working Directory):自己创建的库所在

    版本库(Repository):.git。

   .git最重要的就是stage(或者叫index)的暂存区、Git自动创建的第一个分支master、指向master的    一个指针HEAD。

16. Git跟踪并管理的是修改,而非文件。

17. Git跟踪修改:每次修改,如果不add到暂存区,那就不会加入到commit中。

18. git checkout – file:撤销修改,文件在工作区的修改全部撤销

      (1)自修改后还没有被放到暂存区----撤销修改就回到和版本库一模一样的状态;

      (2)已经添加到暂存区后,又作了修改----撤销修改就回到添加到暂存区后的状态。

          文件回到最近一次git commit或git add时的状态。

19. git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令

20. git reset HEAD file:把暂存区的修改撤销掉(unstage),重新放回工作区

21. git rm file:删除一个文件(已提交版本库永远不会误删,只能恢复文件到最新版本,丢失最近一次提        交后修改的内容)

22. 本地Git仓库和GitHub仓库之间的传输通过SSH加密的,设置:

     (1) 创建SSH Key:查看.ssh目录是否存在id_rsa(私钥)和id_rsa.pub(公钥)

              无:$ ssh-keygen -t rsa -C "邮箱地址"  

     (2) 登陆GitHub,打开“Account settings”,“SSH Keys”页面:

    (3) 点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容

23. Git支持SSH协议,允许你添加多个Key。

   Git支持多种协议,默认的git://使用ssh,也可使用https等其他协议。

      https速度慢、每次推送都必须输入口令


 

24.本地Git库和GitHub上 Git仓库远程同步&备份

     (1)登陆GitHub,“Create a new repo”按钮,创建一个新的仓库:

     (2)$ git remote add origin git@github.com: GitHub账户名/远程库名.git

        Origin:远程库名,Git默认叫法,可更改

    (3) 把本地库的所有内容推送到远程库:git push:把当前分支master推送到远程

     第一次推送master分支:git push–u origin master

Git把本地的master分支内容推送的远程新的master分支,同时关联。在以后的推送或者拉取时就可以简化命令

25. Git远程库克隆:必须知道仓库的地址

     (1) 登陆GitHub,创建一个新的仓库,库名:xxx

     (2) 勾选Initialize this repository with a README,GitHub会自创建README.md文件

     (3) $ git clone git@github.com: GitHub账户名/xxx.git

26.分支管理:创建了一个属于你自己的分支,可一次性合并到原来的分支上

            安全,不影响别人工作

     (1)$ git branch $ git checkout

 ==$ git checkout -b 创建并切换到分支

     (2)git branch :查看分支,当前分支前面会标一个*号。

     (3)git merge :合并指定分支到当前分支

27. commit是本地,不push就不会推到远程

28. master分支:主分支,每次提交,Git都把它们串成一条时间线

   HEAD不是指向提交,指向master,master指向提交,HEAD指向的就是当前分支

29.分支冲突:Git用<<<<<<<</span>,=======,>>>>>>>标记出不同分支的内容

       git log –graph:查看分支合并图

30.$ git merge --no-ff -m "注释" :普通模式合并,合并后的历史有分支

能看出来曾经做过合并

31.git stash: “储藏”当前工作现场,等以后恢复后继续

   git stash list:查看stash内容

   git stash apply: 恢复(stash内容并不删除,用git stash drop删除)

   git stash pop:恢复的同时把stash内容也删了

32. git remote: 查看远程库的信息   -v详细

33.多人协作的工作模式:

(1)可以试图用git push origin branch-name推送自己的修改;

(2)如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

(3)如果合并有冲突,则解决冲突,并在本地提交;

(4)没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!

如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。

34. Git的标签:版本库的快照,指向某个commit的指针。分支可以移动,标签不能移动

(1)git tag :创建新标签。默认标签是打在最新提交的commit上的

         -a:指定标签名

-m:指定说明文字、

-s:用私钥签名一个标签(签名采用PGP签名,安装gpg(GnuPG),没找到gpg,或者没gpg密钥对,就会报错)

(2)git tag commit_id:历史提交的commit打标签

(3)git show :查看说明文字

(4)git push origin :推送标签到远程

(5)git push origin –tags:推送全部未推送过的本地标签

(6)git tag -d :删除一个本地标签

(7)git push origin :refs/tags/:删除一个远程标签。

35.从自己账号clone库,如果从作者的仓库地址克隆,因为没有权限,将不能推送修改。

36.推送pull request给官方仓库来贡献代码

37.$ git config --global color.ui true:显示颜色

38.在Git工作区的根目录下创建一个特殊的.gitignore文件,把要忽略的文件名填进去,Git就会自动忽略这些文件。GitHub准备各种配置文件

39. .gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理

40.$ git config --global alias. 别名 命令名

    --global:全局参数,这些命令在这台电脑的所有Git仓库下都有用。

41. .git/config:放置每个仓库的Git配置文件

42.搭建Git服务器:推荐用Ubuntu或Debian,这样,通过几条apt命令就可以完成

(1)安装git:$ sudo apt-get install git

(2)创建git用户,运行git服务:$ sudo adduser git

(3)创建证书登录: 把所有需登录的公钥导入到/home/git/.ssh/authorized_keys文件里

(4)初始化Git仓库:

选定一个目录作为Git仓库:$ sudo git init --bare 地址

把owner改为git:$ sudo chown -R git:git sample.git

(5) 禁用shell登录:编辑/etc/passwd文件

    git:x:1001:1001:,,,:/home/git:/bin/bash

改为:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出

(6) 克隆远程仓库:$ git clone git@server:服务器库地址

43.人少:收集个人公钥放置/home/git/.ssh/authorized_keys

人多:可以用Gitosis来管理公钥。

44. Gitolite:Git继承开源社区的精神,不支持权限控制。但Git支持钩子(hook),可以在服务器端编写一系列脚本来控制提交等操作,达到权限控制的目的。


本文出自 “Linux运维” 博客,请务必保留此出处http://xuding.blog.51cto.com/4890434/1693133

浅谈github

标签:github

原文地址:http://xuding.blog.51cto.com/4890434/1693133

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!