git


git命令

下载旧版本文件

git co [commitid] [file]
使用...
git co HEAD [file]  //恢复新版本

git tag

git tag -a 0.1 -m "第一个测试版本" //添加tag
git tag -n  //列出所有tag

分支

remote操作

patch

git专有patch同步更改

多远端操作

git svn

alias

在~/.gitconfig中加入

[alias]
    svnclone = svn clone --localtime
    svnup = svn rebase --localtime
    svncommit = svn dcommit --localtime

现有git工程导入svn

$ svn mkdir --parents -m "commit msg" http://url/to/project/dir #在远端创建svn目录
$ git svnclone http://url/to/project/dir #clone到本地
$ cd dir
$ git fetch /path/to/oldgitproject/.git :old #获取原git工程的master分支到old分支 非master分支的话在.git路径后加空格分支名
$ git co old
$ git rebase master #如果分支复杂报错就用patch吧
$ git co master
$ git merge dev
$ git svncommit 提交到svn(有时报不明错误重试几下就好了

git 找回丢失的stash 如手贱stash clear

在.git目录下运行如下命令
for ref in `find .git/objects | sed -e 's#.git/objects/##' | grep / | tr -d /`; do if [ `git cat-file -t $ref` = "commit" ]; then git show --summary $ref; fi; done | less
搜索stash对应的commit, 可找到需要的stash的commitid

使用vimdiff作为比较工具

First, make sure your git version is higher than 1.6.3
Then:
git config --global diff.tool vimdiff
git config --global difftool.vimdiff.cmd "vimdiff" 
git config --global difftool.prompt false 
That's OK. Next time, use "git difftool ..." replace "git diff ..."

在不同目录层次使用git diff的补丁

修改历史提交

若要修改3次前的提交的日志(message)

  1. git rebase -i HEAD~3
  2. 把要修改日志的提交前的pick改成r (在这边改日志是没用的)
  3. 保存后会自动跳转到r对应的那个提交 可以修改日志了

搭建git服务器

参考http://blog.prosight.me/index.php/2009/11/485

  1. 创建一个git用户
    sudo adduser git
    
  2. 安装并启动ssh服务端:
    sudo apt-get install openssh-server
    
  3. 创建git库目录
    # mkdir /opt/git
    # chown git:git /opt/git
    
  4. 切换到git用户
    sudo su git
    
  5. 在git库创建一个工程
    PS: 如果另有一个资源库,无论什么时候都直接拷贝project.git过去就行了
    對我手頭的項目,我喜歡貢獻者去準備倉庫,這樣我可以從其中拉。一些Git伺服讓你 點一個按鈕,擁有自己的分叉項目。
    在我獲取一個樹之後,我運行Git命令去瀏覽並檢查這些變更,理想情況下這些變更組織 良好,描述良好。我合併這些變更,也或許做些編輯。直到滿意,我才把變更推入主資 源庫。
    儘管我不經常收到貢獻,我相信這個方法擴展性良好。
    參見 這篇 來自Linus Torvalds的博客
    $ cd /opt/git
    $ mkdir project.git
    $ cd project.git
    $ git --bare init
    
  6. 添加每个用户ssh pub key
    $ cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
    PS: rsa key用ssh-keygen生成
    

git服务器

使用本地中心库

服务器端:
$ mkdir luandroid.git
$ cd luandroid.git
$ git --bare init
客户端:
$ cd luandroid
$ git remote add local /home/zz/store/proj/_repo_/luandroid.git/
$ git push local master