使用git 进行版本控制

git介绍

Git是一个分布式的版本控制工具,大家应该对git有概念,之前使用几次git,但有段时间没用了,现在权当笔记 记录下来方便以后温习。

Git最初被Linus Torvalds开发出来用于管理Linux内核的开发。每一个Git的工作目录都是一个完全独立的代码库,并拥有完整的历史记录和版本追踪能力,

不依赖 于网络和中心服务器。

git工作机理

Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异如CVS。Git 并不保存

这些前后变化的差异数据。实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信

息并对文件作一快照,然后保存一个指向这次快照的索引,这是 Git 同其他系统的重要区别。如图

                              

Git 使用 SHA-1 算法计算数据的校验和,通过对文件的内容或目录的结构计算出一个 SHA-1 哈希值,作为指纹字符串,并将此结果作为数据的唯一标识和索引。

Git 的工作完全依赖于这类指纹字串,所以你会经常看到这样的哈希值。实际上,所有保存在 Git 数据库中的东西都是用此哈希值来作索引的,而不是靠文件名。

git的所有操作都可以是本地的,仅仅在将新版本的内容上传到服务器上时才需要连接网络。

对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged).

已提交表示数据已经安全存储在本地数据库,已修改表示已经修改了文件,但还没有提交到数据库,已暂存表示已经在当前版本标记了一个更改的文件,以便进入

下一次提交的快照(即把已经修改的文件放在下次提交时要保存的清单中)。参看下图:

                                   

可见Git管理项目时,文件流转的三个工作区域:Git 的本地数据目录,工作目录以及暂存区域。

Git directory(Git 的本地数据目录):是Git保存元数据和对象数据库的地方。这也是Git最重要的部分。

working directory(工作目录):是项目某个版本的内容。

staging area(暂存区域):是一个简单的文件,通常包含在Git目录中。其中存储了将要进入下一次提交的信息。

  基本的 Git 工作流程如下

  1. 在工作目录(working directory)中修改某些文件。
  2. 对修改后的文件进行快照,然后保存到暂存区域(staging area)。
  3. 提交更新(commit),将保存在暂存区域(staging area)的文件快照永久转储到 Git 目录中。

我们可以从文件所处的位置来判断状态:如果是 Git 目录中保存着的特定版本文件,就属于已提交状态;如果作了修改并已放入暂存区域,就属于已暂存状态;

如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。

一张描述git数据迁移的示意图,很清晰,对于理解git的命令很有帮助.

                         

git使用简单举例

1,创建项目  在github 用户名旁边有一个 create a new repo 的小图标,假设新建项目名为project。

2,创建本地新项目 并提交

$ mkdir  project//创建推送目录
$ cd  project         //进入推送目录    
$ git init       //设置该目录为推送
$ touch README   //生成readme
$ git add README //加入修改列表
$ git commit -m 'first commit' //递交修改声明
$ git remote add origin git@github.com:username/project.git //为远程Git更名为origin, origin 在这里就是git@github.com:username/project.git的一个别名

    // git remote add origin 若出现错误 fatal:remote origin already exists 则可以通过命令git remote rm origin删除 已存在的origin。
$ git push -u origin master //推送此次修改 本地和远程合并,本地默认分支为master


git操作常见错误

1git push代码时提示"Permission denied (publickey)"

  提交项目到github 当输入 git push origin master 时出现如下错误:

   Permission denied (publickey).

   fatal: The remote end hung up unexpectedly

  解决方法: 

   这个错误说明 需要我们设置一个 ssh key

  stackoverflow上找到了解决方法,点这里, 或者到官网 也有 Generating SSH Keys的教程,点这里

2, git push出现 Repository not found.

   ERROR: Repository not found.
   fatal: The remote end hung up unexpectedly 

   个问题是因为在你推送的github账户中,并没有这个Repository。
   解决方法
 检查自己的github中的Repository,检查自己创建的目录,必须要两者一致(如果没有项目 则需要创建项目  在用户名旁边有一个 create a new repo 的小图标);

     或者先git clone下github中的Repository,然后再进行更改,这样就一定一致了。

3好吧上面的问题解决了又出现问题

    ! [rejected] master -> master (non-fast-forward)

     error: failed to push some refs to ...

     通过错误提示:your current branch is behind its remote counterpart. merge th remote changes(e.g. ‘git pull’).

    可知原因在于:git仓库中已经有一部分代码,所以它不允许你直接把你的代码覆盖上去。

    解决方法

     有2个选择方式:

  A,git pull

       先把git的东西fetch到你本地然后merge后再push。
       git fetch
       git merge
       这2句命令等价于
       git pull (' 如git pull origin master'就是将origin这个版本库的代码更新到本地的master主枝)
      但是在 使用命令 pull之前需要指定branch与merge可以通过修改 .git/config文件中的下列内容:
     [branch "master"]
           remote = origin
           merge = refs/heads/master
     也可以直接命令行修改
     git config branch.master.remote origin
     git config branch.master.merge ref/heads/master

     上面config修改后,键入命令 git pull origin master,  然后执行 git add,git commit, git push命令即可把需要新增的文件添加到github.

   B,强制推送(不建议使用,会覆盖remote的内容)

       使用命令 git push -f 即可。

4, push的时候出现如下错误:
    fatal: remote error:  
    You can't push to git://github.com/user_name/user_repo.git  
    Use git@github.com:user_name/user_repo.git  

   解决方法
   注意提示,You can't push to git://github.com/user_name/user_repo.git 

   如果在git clone的时  用的是git://github.com:xx/xxx.git的形式, 那么就会出现这个问题,因为这个protocol(git://)是不支持push的.

   所以clone使用这种形式 :git clone git@github.com:user_name/user_repo.git.(然后git remote rm origin,git remote add ....)


统计一下搜到的资料

怎样使用 GitHub ?http://www.zhihu.com/question/20070065

写给Git初学者的7个建议  http://www.open-open.com/news/view/b7227e

Git使用基础篇  http://www.open-open.com/lib/view/open1332904495999.html

Ubuntu 使用Git 使用举例  http://www.cnblogs.com/yourihua/archive/2012/07/07/2580147.html

Pro Git 不错的中文网站  http://iissnan.com/progit/html/zh/ch1_0.html

参考:

http://iissnan.com/progit/html/zh/ch1_0.html

http://blog.csdn.net/chain2012/article/details/7476493

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值