linux下编程----git版本控制

1.git介绍

(1)文件流转的三个工作区域:

①Git 的工作目录:编码区
②暂存区域:执行git add后的文件存放区
③以及本地仓库:被执行了git commit后的文件存放区

(2).文件的三种状态:

①已修改(modified)   :在编码区被修改的文件,还未add到暂存区

②已暂存(staged)     :被add到暂存区,但未commit到本地仓库

③已提交(committed):已经commit到本地仓库

(3).名词解释

①repository:仓库,存放项目的文件夹
②origin:克隆远程仓库到本地路径时,默认将此本地仓库对应的远程仓库取个别名为origin
③master:主分支名称
④fork:克隆别人的项目到自己的github服务器上的项目列表中,之后可以参与贡献代码
而clone只是将项目克隆到本地
 




2.Linux下git操作

(1).安装git客户端步骤:

 ①命令yum install git 回车 选择y,

 ②登录www.github.com官网主页,点击create new repository新代码仓库test,选择public类型,

 ③进入仓库,复制仓库url,在页面右下方HTTPS clone URL,

 ④回到linux系统创建本地项目文件夹test,进入该文件夹git clone https://github.com/mykine/test.git

 回车,就可以将官网服务器上的新建的仓库文件克隆到linux本地test路径下

出错提示:error: Couldn't resolve host 'github.com' while accessing。。。

可能的原因和解决方案:①防火墙限制,使用命令service iptables stop临时关闭防火墙测试一遍即可,开启对应的端口访问

②服务器网关、DNS、路由表等失效,这时ping www.github.com都会失败,显示"unknown host www.github.com",

解决方法参考 http://blog.csdn.net/jo_andy/article/details/44061085


(2)linux本地git库提交更新的文件到远程git服务器仓库

①在仓库(即工作区)中创建新文件jy.txt,输入内容,保存,

②输入命令git status 查看工作区的状态,可以查看到jy.txt还未被跟踪,

③对新文件jy.txt建立跟踪,命令git add jy.txt 

④  再次使用git status查看状态,可以看到显示“可以通过reset 命令将该次提交撤销掉”

    可以通过git commit命令直接提交

⑤提交本次工作区内容变更,命令 git commit

  回车,后提示"enter the commit message",即要求填写提交说明,(默认已用vim打开了提交说明文件,i进入编辑模式)填写完说明后,wq保存并退出,这样就完成本地更新提交

⑥确定本地修改的文件可以发布到服务器时,就同步到提交本地到远程服务器仓库,

命令git push   ,操作时可能出现以下问题:

出错提示1:error:The requested URL returned error: 403 Forbidden while accessing https://github.com/...

 解决办法:编辑工作区目录下的.git下的config文件,vim .git/config,找到[remote "origin"]下的url="https://github.com...",添加github用户名@在url中,即改为url="https://用户名@github.com..."

出错提示2:Gtk-WARNING **: cannot open display:

原因:当前操作所在环境无法打开桌面窗体程序,git push命令之后默认会弹出一个要求输入github登录密码的窗体

解决办法:在git push之前使用命令unset SSH_ASKPASS


 ⑦git push 回车后输入github帐号密码即可发布本地更新到远程服务器仓库

出错提示:everything up to date

原因:刚创建的仓库是完全空的,不包含任何一个分支(branch),因此第一次push时需要指定一个

解决办法:

首先,执行git remote -v命令看到自己的remote端名字为origin:
origin  https://xxxxxxxxx (fetch) 
origin  https://xxxxxxxxx (push)
其次,执行git branch命令看到当前仓库所在的分支是master:
* master
最后,在本地commit后,用以下命令进行首次push
git push origin master

 ⑧以后每次修改或新增文件,一般步骤是1)git add 文件或文件夹、2)git commit 、3)unset SSH_ASKPASS、4)git push等步骤进行版本库更新

  也可以跳过git add (该指令意义是指将指定被修改的文件添加到暂存区)步骤,直接用 git commit -a 直接将已跟踪过的文件提交


(3)分支操作:

git存储的是一系列文件快照,git每次提交时都会产生一个commit对象,并且会指向上一个提交对象(首次提交除外),分支包含着这系列提交对象形成的链表,而每次提交产生的提交对象会向前移动一格,成为新的表头,表头总是指向最后一次提交对象。

Git 中的分支,其实本质上仅仅是个指向某个commit 对象的可变指针。Git 会使用 master 作为分支的默认名字。在若干次提交后,其实已经有了一个指向最后一次提交对象的 master 分支,它在每次提交的时候都会自动向前移动。

一般master主分支上运行生产环境,在主分支的某个提交对象上根据需求建立子分支进行调试开发,在子分支上开发测试好了后回到主分支进行合并,然后提交更新到主分支生产环境。

使用git时,会存在一个HEAD指针指向当前所在的分支,每次提交后 HEAD 随着分支一起向前移动,git就是通过HEAD指针来识别用户所在的分支的。

命令:
①创建本地新分支:git branch xx分支名称
运行 git branch 命令,仅仅是建立了一个新的分支,但不会自动切换到这个分支中去,仍然停留在当前分支上,因为HEAD值没有改变


②切换本地分支:git checkout xx分支名称
当执行git checkout XXX命令时,HEAD指针会变更指向XXX分支,用户自然就切换到新分支XXX下了


③创建本地新分支并且切换该分支:git checkout -b xxx新分支名称

   创建本地branch对应远端branch:git checkout -b 新本地branch -t 远端别名/远端branch


④删除本地分支:git branch -d xx分支名称


⑤提交本地分支到远程仓库:git push origin xx分支名


⑥删除远程分支:git push origin:xx分支名 (这里的冒号就代表删除)


⑦合并分支:
首先,切回主分支master,git checkout master
然后,使用命令git merge xx分支名称,将xx分支的修改合并到master中,此时master指向最新的提交对象。
(如果顺着一个分支走下去可以到达另一个分支的话,那么 Git 在合并两者时,只会简单地把指针右移,
因为这种单线的历史分支不存在任何需要解决的分歧,所以这种合并过程可以称为快进(Fast forward);
其他情况较复杂,会独立生成一个新的对象最为合并点,指向涉及到的多个分支)


⑧更新远程分支到本地branch列表: git remote update

    查看远程分支 git branch -r

    查看本地分支 git branch

    查看所有分支git branch -a


(3)其他操作:

①.更新远程仓库代码到本地仓库:

首先git status 检查本地文件是否全部提交成功,确保本地文件和即将从服务器上更新到本地的文件不会起冲突

然后 git pull 

最后输入git密码更新即可

可能出现的问题: error: Untracked working tree file 'db.sql' would be overwritten by merge.

解决方案:首先git clean -d -fx 清除本地起冲突的文件

然后直接获取远程仓库文件到本地 git pull


如果想获取远程某个分支的代码到本地分支,可以用  

(1)git pull 远程仓库别名  远程分支名  本地分支名  

    不写本地分支名,则默认是当前所在本地分支

(2)本地创建新分支对应远程分支:git checkout -b 新本地branch -t 远端别名/远端branch

   


git fetchgit pull 都可以更新本地库,关于他们的区别,参考http://blog.csdn.net/a19881029/article/details/42245955


②.删除远程文件

首先git rm -f xx文件 删除本地文件

然后git commit 提交更新到本地仓库

最后推送到远程仓库删除对应文件git push


如果在本地没有通过git rm方式而是直接删除文件,则无法顺利git commit,这时只要按照文件名创建对应的文件,然后按照以上步骤操作即可。


更改文件名称 也使用git mv ...


③.忽略文件不参与版本控制

创建.gitignore文件,该文件对其所在目录及其子目录均有效。通过将.gitignore文件添加到仓库,其他开发者更新该文件到本地仓库,以共享同一套忽略规则。

.gitignore文件中每一行都是一个规则,基本的语法规则如下:

#以'#'开头的行是注释行,git会忽略它

*.a          忽略对所有以.a结尾的文件的跟踪

!xml.a       但是xml.a除外

/test.txt           仅仅忽略项目根目录下的test.txt文件

pro/          忽略pro目录下的所有文件


(4)撤销操作

① 取消已经暂存(已执行git add 并且无论是否执行git commit)的文件,文件将变成git add之前的状态

    git reset HEAD xx文件

② 取消最后一次commit操作,重新进入提交界面但是本次将使用当前最新的暂存区快照,

    如果当前暂存区和上次提交时一样,则这次提交操作相当于重新编辑提交说明。

    如果刚才提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行 --amend 提交。

    git commit --amend

     

③ 取消对文件的修改(目标文件要处于git add前的状态),务必谨慎使用此命令,因为

   文件将还原为修改前的版本,本次修改的内容将消失

     git checkout -- 文件名






参考http://git.oschina.net/progit/    和 http://git-scm.com/book/zh/v1


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值