Home | 简体中文 | 繁体中文 | 杂文 | 知乎专栏 | 51CTO学院 | CSDN程序员研修院 | Github | OSChina 博客 | 腾讯云社区 | 阿里云栖社区 | Facebook | Linkedin | 打赏(Donations) | About
知乎专栏多维度架构

第 11 章 Git - Fast Version Control System

distributed revision control system

目录

11.1. Repositories 仓库管理
11.1.1. initial setup
11.1.2. checkout
11.1.3. Creating and Commiting
11.1.4. Manager remote
11.1.5. Status
11.1.6. Diff
11.1.6.1. --name-only 仅显示文件名
11.1.7. Cloning
11.1.8. Push
11.1.9. Pull
11.1.10. fetch
11.1.11. Creating a Patch
11.1.12. reset
11.2. 分支管理
11.2.1. 查看本地分支
11.2.2. 创建分支
11.2.3. 删除分支
11.2.4. 切换分支
11.2.5. 重命名分支
11.2.6. git-show-branch - Show branches and their commits
11.3. Sharing Repositories with others
11.3.1. Setting up a git server
11.3.2. 修改 origin
11.3.3. 删除 origin
11.4. Submodule 子模块
11.4.1. 添加模块
11.4.2. checkout 子模块
11.4.3. 删除子模块
11.5. Git Large File Storage
11.5.1. 安装 LFS 支持
11.5.2. LFS lock
11.6. command
11.6.1. hash-object
11.6.2. git-add - Add file contents to the index
11.6.3. git-status - Show the working tree status
11.6.4. git-commit - Record changes to the repository
11.6.5. git-show - Show various types of objects
11.6.6. git-checkout - Checkout and switch to a branch
11.6.6.1. checkout master
11.6.6.2. checkout branch
11.6.7. git config
11.6.8. git log
11.7. git-daemon 服务器
11.7.1. git-daemon - A really simple server for git repositories
11.7.2. git-daemon-sysvinit
11.7.3. inet.conf / xinetd 方式启动
11.7.4. git-daemon-run
11.7.5. Testing
11.8. git config
11.8.1. core.sshCommand
11.8.2. fatal: The remote end hung up unexpectedly
11.8.3. 忽略 SSL 检查
11.9. git-svn - Bidirectional operation between a single Subversion branch and git
11.10. .gitignore
11.11. .gitattributes
11.11.1. SVN Keywords
11.12. gitolite - SSH-based gatekeeper for git repositories
11.12.1. gitolite-admin
11.12.1.1. gitolite.conf
11.12.1.1.1. staff
11.12.1.1.2. repo
11.13. Web Tools
11.13.1. viewgit
11.14. FAQ
11.14.1. 导出最后一次修改过的文件
11.14.2. 导出指定版本区间修改过的文件
11.14.3. 回撤提交
11.14.4. 每个项目一个证书

homepage: http://git.or.cz/index.html

过程 11.1. Git

  1. install

    sudo apt-get install git-core
    			
  2. config

    			
    $ git-config --global user.name neo
    $ git-config --global user.email openunix@163.com
    			
    			
  3. Initializ

    $ mkdir repository
    $ cd repository/
    
    /repository$ git-init-db
    Initialized empty Git repository in .git/
    			

    to check .gitconfig file

    $ cat ~/.gitconfig
    [user]
            name = chen
            email = openunix@163.com
    			

11.1. Repositories 仓库管理

11.1.1. initial setup

Tell git who you are:

$ git config user.name "FirstName LastName"
$ git config user.email "user@example.com"

If you have many git repositories under your current user, you can set this for all of them


$ git config --global user.name "FirstName LastName"
$ git config --global user.email "user@example.com"

If you want pretty colors, you can setup the following for branch, status, and diff commands:

$ git config --global color.branch "auto"
$ git config --global color.status "auto"
$ git config --global color.diff "auto"

Or, to turn all color options on (with git 1.5.5+), use:

$ git config --global color.ui "auto"
To enable aut-detection for number of threads to use (good for multi-CPU or multi-core computers) for packing repositories, use:


$ git config --global pack.threads "0"
To disable the rename detection limit (which is set "pretty low" according to Linus, "just to not cause problems for people who have less memory in their machines than kernel developers tend to have"), use:

$ git config --global   diff.renamelimit "0"
		
11.1.2. checkout

将 nqp-cc/src/QASTCompilerMAST.nqp 文件 重置到 211ab0b19f25b8c81685a97540f4b1491eb17504 版本

git checkout 211ab0b19f25b8c81685a97540f4b1491eb17504 -- nqp-cc/src/QASTCompilerMAST.nqp
		
11.1.3. Creating and Commiting
$ cd (project-directory)
$ git init
$ (add some files)
$ git add .
$ git commit -m 'Initial commit'
		
11.1.4. Manager remote

remote add

		
git remote add origin git@localhost:example.git
		
			

remote show

		
git remote show
origin
		
			

remote rm

		
git remote rm origin
		
			

添加多个远程仓库

git remote add origin git@localhost:example.git
git remote add another https://gitcafe.com/netkiller/netkiller.gitcafe.com.git
git push origin master
git push another master
		
11.1.5. Status
		
$ git clone git://10.10.0.5/example.git
Cloning into example...
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 1), reused 0 (delta 0)
Receiving objects: 100% (5/5), done.
Resolving deltas: 100% (1/1), done.

neo@neo-OptiPlex-380:~/tmp$ cd example/

neo@neo-OptiPlex-380:~/tmp/example$ git status
# On branch master
nothing to commit (working directory clean)

neo@neo-OptiPlex-380:~/tmp/example$ ls
test1  test2  test3  test4

neo@neo-OptiPlex-380:~/tmp/example$ echo hello > test1

neo@neo-OptiPlex-380:~/tmp/example$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   test1
#
no changes added to commit (use "git add" and/or "git commit -a")
		
			
11.1.6. Diff
		
neo@neo-OptiPlex-380:~/tmp/example$ git diff
diff --git a/test1 b/test1
index e69de29..ce01362 100644
--- a/test1
+++ b/test1
@@ -0,0 +1 @@
+hello
		
			

比较 nqp-cc/src/QASTCompilerMAST.nqp 文件 当前版本与 211ab0b19f25b8c81685a97540f4b1491eb17504 版本的区别

git diff 211ab0b19f25b8c81685a97540f4b1491eb17504 -- nqp-cc/src/QASTCompilerMAST.nqp
		
11.1.6.1. --name-only 仅显示文件名
git diff --name-only
			
11.1.7. Cloning
		
$ git clone git://github.com/git/hello-world.git
$ cd hello-world
$ (edit files)
$ git add (files)
$ git commit -m 'Explain what I changed'
		
			
11.1.8. Push
		
$ git clone git://10.10.0.5/example.git
$ cd example
$ (edit files)
$ git add (files)
$ git commit -m 'Explain what I changed'

$ git push origin master
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 278 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To git://10.10.0.5/example.git
   27f8417..b088cc3  master -> master
		
			
11.1.9. Pull
$ git pull
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From git://10.10.0.5/example
   27f8417..b088cc3  master     -> origin/master
Updating 27f8417..b088cc3
Fast-forward
 test1 |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
		
11.1.10. fetch
$ git fetch
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 2 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (2/2), done.
From git://10.10.0.5/example
   b088cc3..7e8c17d  master     -> origin/master
		
11.1.11. Creating a Patch
		
$ git clone git://github.com/git/hello-world.git
$ cd hello-world
$ (edit files)
$ git add (files)
$ git commit -m 'Explain what I changed'
$ git format-patch origin/master
		
			
11.1.12. reset

重置到上一个版本

git log
git reset --hard HEAD^
git log
git push -f