Git 和 Repo常用命令

 

这篇博客总结的也不错:

git常用及进阶命令总结

Git与Repo入门

 

一、初始環境配置

git config --global user.name "John Doe"
git config --global user.email johndoe@example.com


git config --global core.editor vim
git config --global color.ui true


git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status

 

使用vimdiff作为 git diff工具

 

git config --global diff.tool vimdiff
git config --global difftool.prompt false
git config --global alias.d difftool

 

然后使用 git d 打开对比代码,然后用 :wq 继续比较下一个文件。

 

git merge时使用vimdiff

git config --global merge.tool vimdiff
git config --global mergetool.prompt false

 

二、常用的命令

  •  .gitignore文件配置的一些规则

 *.a # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

  •  查看已暫存起來的文件跟上次提交時的快照之間的差異

    git diff --cached

  • 查看還沒有暫存起來的改動

    git diff

  • 將已經提交的文件從Git倉庫中刪除,但是本地還保留該文件,即取消跟蹤某個文件

    git rm --cached readme.txt

  • 查看某次提交改動了那些文件

    git log --stat

    git log --stat dd257933fa4b9fea66a1195f8a15111029810abc -1
  • 簡要列出最近的提交commet
$git log --pretty=oneline
694d0d0bb2030d2e36df73e2d23d5770511dbc8d Linux 4.8-rc2
0043ee40f98d15a50721fbd5dbf7c7797f8d03cd Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux
4ef870e373382f18de214f61e5d5eb83b62b7aa5 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gerg/m68knommu
  • 列出某人的提交記錄
$git log --author="Linus Torvalds"
commit 694d0d0bb2030d2e36df73e2d23d5770511dbc8d
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Sun Aug 14 19:11:36 2016 -0700

    Linux 4.8-rc2

commit 0043ee40f98d15a50721fbd5dbf7c7797f8d03cd
Merge: 4ef870e 1577ddf
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Sun Aug 14 19:01:31 2016 -0700

    Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/rzhang/linux
    
    Pull thermal updates from Zhang Rui:

  如果想過濾掉這個人的merge記錄,可以用 git log --author="Linus Torvalds" --no-merges

  • 取消已經暫存的某個文件

    git reset HEAD readme.txt

  • 查看遠程倉庫的信息

    git remote show origin

  • 查看某個文件的若干行的改動記錄

    git blame -L 12,22 simplegit.rb

  • 获得某次提交的某个文件

    git checkout commit-id  file_name

  • 将本地的tags全部push到远程仓库

    git push origin --tags

  • 将本地分支全部push到远程仓库

    git push --all origin

  • git clean的用法

     git clean -n      显示 将要 删除的 文件 和  目录

     git clean -f  删除当前目录下所有没有track过的文件. 他不会删除.gitignore文件里面指定的文件夹和文件, 不管这些文件有没有被track过.

     git clean -df     删除当前目录下没有被track过的文件和文件夹

     git clean -xfd   删除当前目录下所有没有track过的文件. 不管他是否是.gitignore文件里面指定的文件夹和文件.

 

三、配置git email

 在给linux kernel提交patch的时候一般都使用git send-email。

可以用用下面的命令安装git send-mail:

sudo apt-get install git-email

使用网易的163邮箱配置的方法:

1. 打开网易邮箱的设置界面,查看一下smtp的服务器的地址,如下图所示:

 2. 修改.gitconfig,如下:

[user]
    email = pengdonglin137@163.com
    name = Donglin Peng
[sendemail]
    smtpserver = smtp.163.com
    smtpserverport = 587
    smtpuser = pengdonglin137@163.com
    smtpencryption = ssl
    confirm = auto


3. 测试

$git send-email 0001-ASoC-dpcm-print-dai_link-name-of-BE-other-than-FE.patch --to pengdonglin137@163.com 
0001-ASoC-dpcm-print-dai_link-name-of-BE-other-than-FE.patch
(mbox) Adding cc: Donglin Peng <pengdonglin@smartisan.com> from line 'From: Donglin Peng <pengdonglin@smartisan.com>'
(body) Adding cc: Donglin Peng <pengdonglin@smartisan.com> from line 'Signed-off-by: Donglin Peng <pengdonglin@smartisan.com>'

From: Donglin Peng <pengdonglin137@163.com>
To: pengdonglin137@163.com
Cc: Donglin Peng <pengdonglin@smartisan.com>
Subject: [PATCH] ASoC: dpcm: print dai_link name of BE other than FE.
Date: Mon, 26 Sep 2016 17:55:36 +0800
Message-Id: <20160926095536.5890-1-pengdonglin137@163.com>
X-Mailer: git-send-email 2.9.3

Send this email? ([y]es|[n]o|[q]uit|[a]ll): y
Password for 'smtp://pengdonglin137@163.com@smtp.163.com:587': 
OK. Log says:
Server: smtp.163.com
MAIL FROM:<pengdonglin137@163.com>
RCPT TO:<pengdonglin137@163.com>
RCPT TO:<pengdonglin@smartisan.com>
From: Donglin Peng <pengdonglin137@163.com>
To: pengdonglin137@163.com
Cc: Donglin Peng <pengdonglin@smartisan.com>
Subject: [PATCH] ASoC: dpcm: print dai_link name of BE other than FE.
Date: Mon, 26 Sep 2016 17:55:36 +0800
Message-Id: <20160926095536.5890-1-pengdonglin137@163.com>
X-Mailer: git-send-email 2.9.3

Result: 250 Mail OK queued as smtp5,D9GowAAnL4ea8OhXVnd4Cw--.197S2 1474883745

 

4. 下面是收件箱的内容:

 

 5. 向linux社区提交patch的时候,发送的邮件必须是纯文本格式,而不能是HTML格式。

 6. 可以参考内核文档:https://www.kernel.org/doc/Documentation/SubmittingPatches

 7. 可以参考博客:

  http://files.cnblogs.com/files/pengdonglin137/Linux_community_and_Upstream_Linux_Codes.pdf

  http://blog.sina.com.cn/s/blog_936739790102v5eu.html

 

用Git打包文件

git archive --format=tar.gz --prefix=Linux-3.16/ v3.16 > Linux-3.16.tar.gz

git archive --format=tar.gz --prefix=Linux-4.17/ 29dcea88779c856c7dc92040a0c01233263101d4 > Linux-4.17.tar.gz

 

 repo 常用命令

repo start <topic_name>

  开启一个新的主题,其实就是每个Project都新建一个分支

repo init -u <url> [OPTIONS]

 在当前目录下初始化repo,会在当前目录生生成一个.repo目录,像Git Project下的.git一样,-u指定url,可以加参数-m指定manifest文件,默认是default.xml,.repo/manifests保存manifest文件。.repo/projects下有所有的project的数据信息,repo是一系列git project的集合,每个git project下的.git目录中的refs等目录都是链接到.repo/manifests下的。

repo manifest

可以根据当前各Project的版本信息生成一个manifest文件

repo sync [PROJECT1...PROJECTN]

 同步Code。

repo status

 查看本地所有Project的修改,在每个修改的文件前有两个字符,第一个字符表示暂存区的状态。

-no changesame in HEAD and index
Aaddednot in HEAD, in index
Mmodifiedin HEAD, modified in index
Ddeletedin HEAD, not in index
Rrenamednot in HEAD, path changed in index
Ccopiednot in HEAD, copied from another in index
Tmode changedsame content in HEAD and index, mode changed
Uunmergedconflict between HEAD and index; resolution required

  每二个字符表示工作区的状态 

lettermeaningdescription
-new/unknownnot in index, in work tree
mmodifiedin index, in work tree, modified
ddeletedin index, not in work tree

 

repo prune <topic> 

 删除已经merge的分支

repo abandon <topic>

 删除分支,无论是否merged

repo branch或repo branches

 查看所有分支

repo diff

查看修改

repo upload

上传本地提交至服务器

repo forall [PROJECT_LIST]-c COMMAND

 对指定的Project列表或所有Project执行命令COMMAND,加上-p参数可打印出Project的路径。

repo forall -c 'git reset --hard HEAD;git clean -df;git rebase --abort'

这个命令可以撤销整个工程的本地修改。

比如:

把所有的库切换分支:  repo forall  -c git checkout branch_name

删除所有库的某个分支: repo forall  -c git branch -D branch_name

实例: repo forall -c "git co aosp/o-preview -b o-preview"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

==

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值