zoukankan      html  css  js  c++  java
  • 一起学习linux环境的git

    第一节 

    GIT最初是由Linus Benedict Torvalds为了更有效地管理Linux内核开发而创立的分布式版本控制软件,与常用的版本控制工具如CVS、Subversion不同,它不必服务器端软件支持,速度和效率也有着相当程度的提高。

      如果拥有CVS或者SVN的使用背景,那么更熟悉的方法是客户端-服务器端模式,所有的文件仓库(repository)都是存放在服务器上的,用户需要在本地安装客户端去服务器上的项目中获取旧版本,提交新版本。

      GIT抛弃了这种模式,当用户从远端GIT仓库下载一个工程(project)时,这个工程的所有文件,包括版本历史,文件改动都会下载下来,这时 候本地GIT就演变成了一个服务器,所有的提交(check-in)、提出(check-out)都会在这个本地服务器上执行,当你确定一项修改之后,可 以再和远端仓库进行合并和同步(merge)。所以,GIT的安装和配置步骤无论在本机还是服务器上都是完全一样的。

      这里简单地介绍GIT在Linux上的安装和使用,算做一个新手入门的简单教程。另外,GIT是有Windows上的客户端的。

      1、下载和安装GIT

      从这里 http://git-scm.com/download 下载GIT或者使用wget命令获取

      $ cd

      $ wget http://kernel.org/pub/software/scm/git/git-1.7.6.tar.bz2

      解压后切换到其目录

      $ tar xvfj git-1.7.6.tar.bz2

      $ cd git-1.7.6

      使用默认配置进行安装,如果想修改配置,可以使用 ./configure --help 来获取帮助

      $ ./configure

      $ make

      $ make install

      2、初始化配置

      GIT默认安装在 /usr/local/bin ,安装之后可以验证一下是否安装好

      $ whereis git

      git: /usr/local/bin/git

      $ git  --version

      git version 1.7.6

      $ git  --help

      首先需要指定用户名和电子邮件地址

      $ git config   --global user.name "Admin"

      $ git config  --global user.email admin@gmail.com

    取消配置的用户名和密码:

    $ git config --global --unset user.name 3333

    $ git config --global --unset user.email3333@gmail.com

    如果有多个项目,使用全局配置会出现串门现象。建议一个项目一个git用户,使用添加信息

    $ git config user.name "admin"

    $ git config user.email admin@gmail.com

      再验证一下配置信息

      $ git config  --list

      user.name=GIT Admin

      user.email=obugs.net@gmail.com

      core.repositoryformatversion=0

      core.filemode=true

      core.bare=false

      core.logallrefupdates=true

      其实这些配置是存放在个人主目录下的 .gitconfig 文件中的

      $ cat ~/.gitconfig

      [user]

      name = GIT Admin

      email = obugs.net@gmail.com

      3、建立工程

      本地存储的任何一个目录都可以建立GIT工程,如果已有工程位于 /home/obugs/projects/orangebugs 目录,就可以把这目录定义为GIT工程

      $ cd /home/obugs/projects/orangebugs

      $ git init

      Initialized empty Git repository in /home/obugs/projects/orangebugs/.git/

    第二节提交本地代码

    这样就建立了一个名为 .git 的文件夹,这就是GIT用来存储信息和跟踪改动的文件夹。

      $ ls -altr .git

      total 40

      drwxrwxr-x 4 git git 4096 Aug 13 22:39 refs

      drwxrwxr-x 4 git git 4096 Aug 13 22:39 objects

      drwxrwxr-x 2 git git 4096 Aug 13 22:39 info

      drwxrwxr-x 2 git git 4096 Aug 13 22:39 hooks

      -rw-rw-r -- 1 git git 23 Aug 13 22:39 HEAD

      -rw-rw-r -- 1 git git 73 Aug 13 22:39 description

      -rw-rw-r -- 1 git git 92 Aug 13 22:39 config

      drwxrwxr-x 2 git git 4096 Aug 13 22:39 branches

      drwxrwxr-x 36 git git 4096 Aug 13 22:39

      drwxrwxr-x 7 git git 4096 Aug 13 22:39 .

      4、向工程添加和提交文件

      这些动作和CVS、SVN等操作类似

      $ git add *.java *.c

      $ git commit -m 'Initial upload of the project'

      create mode 100755 Orangebugs.java

      create mode 100755 pwm/ui/DataManager.java

      create mode 100755 pwm/ui/PasswordFrame.java

      create mode 100755 pwm/tools/StrongEncryption.java

      create mode 100755 pwm/tools/PasswordStrength.java

      注意如果之前没有使用 git config 指定用户名和电子邮件地址,这里会报错

      $ git commit -m 'Initial upload of the project'

      *** Please tell me who you are.

      Run

      git config  --global user.email "you@example.com"

      git config  --global user.name "Your Name"

      to set your account's default identity.

      Omit  --global to set the identity only in this repository.

      fatal: empty ident not allowed

      5、更改文件和提交改动

      编辑文件、添加或者删除了一些字段

      $ vi Orangebugs.java

      查看和GIT仓库中的文件相比有了那些改动

      $ git diff

      diff  --git a/Orangebugs.java b/Orangebugs.java

      index 6166ed1fd82d32 100644

      - a/Orangebugs.java

      +++ b/Orangebugs.java

      @@ -2,7 +2,7 @@

      - public counter=10

      + public counter=55

      如果要提交,需要先确保将文件添加到了临时区域(staging area)然后才能提交,提交时会自动打开系统的默认编辑器,用户添加一些注释后保存并退出编辑器的时候,这些注释就同时提交到仓库中去了

      $ git add Orangebugs.java

      $ git commit

      [master 80f10a9] Added password strength meter functionality

      1 files changed, 56 insertions(+), 7 deletions(-)

      或者,简单一点的方法是使用 git commit -a (-a指代缓存区的被提交过的,即修改的文件)把上面两个命令合二为一。

    一个命令就可以add所有修改的文件:

    git add .

    git add . 会把本地所有untrack的文件都加入暂存区,并且会根据.gitignore做过滤,但是git add * 会忽略.gitignore把任何文件都加入 

    在使用Git的过程中,我们喜欢有的文件比如日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交。

    规则 作用
    /mtk 过滤整个文件夹
    *.zip 过滤所有.zip文件
    /mtk/do.c 过滤某个具体文件
    !/mtk/one.txt 追踪(不过滤)某个具体文件
    注意:如果你创建.gitignore文件之前就push了某一文件,那么即使你在.gitignore文件中写入过滤该文件的规则,该规则也不会起作用,git仍然会对该文件进行版本管理。

    配置语法
    以斜杠“/”开头表示目录;
    以星号“*”通配多个字符;
    以问号“?”通配单个字符
    以方括号“[]”包含单个字符的匹配列表;
    以叹号“!”表示不忽略(跟踪)匹配到的文件或目录。
    注意: git 对于 .gitignore配置文件是按行从上到下进行规则匹配的

    6、查看状态和查看注释

      如果本地的文件和远端GIT仓库上的文件相比没有任何改动,则

      $ git status

      # On branch master

      nothing to commit (working directory clean)

      如果本地做了改动但是没有提交,则

      $ git status

      # On branch master

      # Changes not staged for commit:

      # (use "git add …" to update what will be committed)

      # (use "git checkout - …" to discard changes in working directory)

      #

      # modified: Orangebugs.java

      #

      no changes added to commit (use "git add" and/or "git commit -a")

      另外,可以用下面的命令查看文件历史和以往的注释

      $ git log Orangebugs.java

      commit c919ced7f42f4bc06d563c1a1eaa107f2b2420d5

      Author: GIT Admin

      Date: Sat Aug 13 22:54:57 2011 -0700

      Added password strength meter functionality

      commit c141b7bdbff429de35e36bafb2e43edc655e9957

      Author: GIT Admin

      Date: Sat Aug 13 20:08:02 2011 -0700

      Initial upload of the project

    git rm --cached 文件名 ,可以从缓存区移除文件,使该文件变为未跟踪的状态,

    同时下次提交时从本地库中删除


    分支版本操作
    1、创建和合并分支

    [plain] view plain copy
     
    1. git branch #显示当前分支是master  
    2. git branch new-feature  #创建分支  
    3. git checkout new-feature  #切换到新分支  
    4. vi page_cache.inc.php  
    5. git add page_cache.inc.php  
    6. git commit -a -m "added initial version of page cache"  
    7. git push origin new-feature  ##把分支提交到远程服务器,只是把分支结构和内容提交到远程,并没有发生和主干的合并行为。  

    2、如果new-feature分支成熟了,觉得有必要合并进master

    [plain] view plain copy
     
      1. git checkout master  #切换到新主干  
      2. git merge new-feature  ##把分支合并到主干  
      3. git branch #显示当前分支是master  
      4. git push  #此时主干中也合并了new-feature的代码 

    第三节: 上传本地代码到github

    3.1 在github里添加myRepo

    $ git remote add myRepo https://github.com/scictor/myRepo

    3.2 [中间一步(如果github上远程myepo库有修改,那么先将远程修改pull下来)

    push前先将远程repository修改pull下来: $git pull myRepo master

    3.3 上传文件

    git push -u myRepo master

    如果之前配置过一次,再次配置则会提示以下错误:
    ERROR:远程 origin 已经存在。
    此时只需要将远程配置删除,重新添加即可;
    git remote rm origin
    git remote add origin https://github.com/***.git
    再次提交文件即可正常使用

  • 相关阅读:
    人性的经典总结54句
    系统程序员成长计划文本处理(XML解析器)
    系统程序员成长计划-像机器一样思考(二)
    Android输入事件流程
    系统程序员成长计划文本处理(INI解析器)
    request范围内共享属性 request_attribute.jsp
    系统程序员成长计划-像机器一样思考(三)
    系统程序员成长计划-像机器一样思考(一)
    Android IPC机制详解
    系统程序员成长计划文本处理(一)状态机(1)
  • 原文地址:https://www.cnblogs.com/guxuanqing/p/5339314.html
Copyright © 2011-2022 走看看