您的位置:首页 > 其它

Git每天都会用到的20个命令(译官网资料)

2017-09-13 09:26 495 查看
官网链接 https://git-scm.com/docs/giteveryday

文中多次提到上游,我个人的理解是你的上一级代码库。就好像SVN的服务端代码。

定义

giteveryday — Everyday Git是Git最常用命令的最小集合

概要

有20个命令

描述

为方便描述,Git用户可以广泛地分为四类。

个人开发者(独立) 这些命令对于任何人的代码提交都是重要的,即使是独立开发者也不例外。

如果您与其他人合作,您还需要“ 个人开发者(合作开发)”部分中列出的命令。

运维管理人员除了上述之外,还需要学习更多的命令。

存储库管理命令适用于负责Git存储库的管理和馈送的系统管理员。

个人开发者(独立)

独立的个人开发人员不会与其他人交换补丁,可以使用以下命令在单个存储库中单独使用。

git-init [1]创建一个新的存储库。

git-log [1]看看发生了什么。

git-checkout [1]和git-branch [1]切换分支。

git-add [1]来管理索引文件。

git-diff [1]和git-status [1],看看你在做什么。

git-commit [1]推进当前分支。

git-reset [1]和git-checkout [1](使用路径名参数)来撤消更改。

git-merge [1]在本地分支之间合并。

git-rebase [1]维护主题分支。

git-tag [1]标记一个已知的点。

例子

使用tarball作为新存储库的起点。

$ tar zxf frotz.tar.gz
$ cd frotz
$ git init
$ git add。(1)
$ git commit -m "import of frotz source tree."
$ git tag v2.43 (2)


添加当前目录下的所有内容。

增加一个简洁明了的提交注释信息。

创建一个主题分支和开发。

$ git checkout -b alsa-audio (1)
$ edit/compile/test
$ git checkout -- curses/ux_audio_oss.c (2)
$ git add curses/ux_audio_alsa.c (3)
$ edit/compile/test
$ git diff HEAD (4)
$ git commit -a -s (5)
$ edit/compile/test
$ git diff HEAD^ (6)
$ git commit -a --amend (7)
$ git checkout master (8)
$ git merge alsa-audio (9)
$ git log --since='3 days ago' (10)
$ git log v2.43.. curses/ (11)


创建一个新的主题分支。

恢复你的笨拙的变化
curses/ux_audio_oss.c


你需要告诉Git是否添加了一个新的文件; 如果您
git commit -a
以后再对文件进行移除和修改操作,Git会告知你。

看看你正在做什么改变。

提交你已经测试过并打过标记的内容。

查看所有更改,包括以前的提交。

修改先前的提交,添加所有新的更改,使用您的原始消息。

切换到主分支。

将主题分支合并到主分支中。

查看提交日志; 可以组合其他形式来限制输出,并包括
-10
(最多显示10个提交)
--until=2005-12-10
等。

只查看
curses/
目录中的内容的更改或创建,自从
v2.43
开始实施。

个人开发者(合作开发)

作为组织项目参与者的开发人员需要了解如何与他人进行沟通,并且除了独立开发人员所需的命令外,还使用这些命令。

git-clone [1]从代码仓库下载代码到本地。

git-pull [1]和git-fetch [1]从“origin”保持与库中代码版本一致。

git-push [1]分享代码库,如果你接受CVS风格的Repo管理工作流程。

git-format-patch [1]准备电子邮件提交,如果你接受Linux内核风格的公开论坛工作流程。

git-send-email [1]发送您提交的电子邮件,without corruption by your MUA.(这句没理解)。

git-request-pull [1]创建上游代码库的更改摘要。

例子

克隆上游并对其进行处理。并提交更改到上游。

$ git clone git://git.kernel.org/pub/scm/.../torvalds/linux-2.6 my2.6
$ cd my2.6
$ git checkout -b mine master (1)
$ edit / compile / test; git commit -a -s (2)
$ git format-patch master (3)
$ git send-email --to =“person <email@example.com>”00 * .patch (4)
$ git checkout master (5 )
$ git pull (6)
$ git log -p ORIG_HEAD .. arch / i386 include / asm-i386 (7)
$ git ls-remote --heads http://git.kernel.org/.../jgarzik/ libata-dev.git (8)
$ git pull git://git.kernel.org/pub/.../jgarzik/libata-dev.git ALL (9)
$ git reset --hard ORIG_HEAD (10)
$ git gc (11)


从主机检出一个新
mine
的分支。

根据需要重复操作。

从你的分支中提取补丁(分枝是相对于master而言的)。

发送电子邮件。

返回到
master
,看看有什么新的变化。

git pull
origin
默认提取,合并到当前分支。

pull代码后后,看看上次修改之后的修改,只关注我们感兴趣的地方。

检查外部存储库中的分支名称(如果不知道)。

ALL
特定的存储库中获取特定的分支并将其合并。

恢复pull。

将pull版本后的冗余信息恢复。

推入(push)到另一个存储库。

satellite$ git clone mothership:frotz frotz (1)
satellite$ cd frotz
satellite$ git config --get-regexp '^(remote|branch)\.' (2)
remote.origin.url mothership:frotz
remote.origin.fetch refs/heads/*:refs/remotes/origin/*
branch.master.remote origin
branch.master.merge refs/heads/master
satellite$ git config remote.origin.push \
+refs/heads/*:refs/remotes/satellite/* (3)
satellite$ edit/compile/test/commit
satellite$ git push origin (4)

mothership$ cd frotz
mothership$ git checkout master
mothership$ git merge satellite/master (5)


20170913存档

1. Master主机在您的主目录下有一个frotz存储库; 从它clone代码,以在本地PC上启动一个存储库。

2. 克隆默认设置这些配置变量。安排
git pull
将母机分支机构存放到本地
remotes/origin/*
远程分支机构。

3. 安排
git push
将所有当地分支机构推到Master相应的分支代码。

4. 将我们所有的工作都push到
remotes/satellite/*
在母机上的远程跟踪分支上。您可以将其用作备份方法。同样,你可以假装那个“你”获得的Master(当访问是单面的时候很有用)。

5. 在Master主机上,将客户开
1fff8
发机上完成的工作合并到主干代码。

分支特定标签。

$ git checkout -b private2.6.14 v2.6.14 (1)
$ edit/compile/test; git commit -a
$ git checkout master
$ git cherry-pick v2.6.14..private2.6.14 (2)


根据一个众所周知的的标签创建一个私人分支。(尽管1众所周知的名字显得有些俗气)

转发端口所有更改
private2.6.14
分支到master分支没有正式的“合并”。

git format-patch -k -m --stdout v2.6.14..private2.6.14 | git am -3 -k


另一个参与者提交机制正在使用
git request-pull
或拉取请求机制(例如,在GitHub(www.github.com)上使用的 机制来通知您的上游您的贡献。

合并补丁

收到别人的补丁建议,可以使用以下命令处理。

可以使用
git request-pull
在GitHub(www.github.com)上回复处理这些建议,将其合并到主干代码或建立一个参与者的分支代码库。

git-am [1]应用别人发送来的补丁。
git-pull [1]合并你信任的补丁。
git-format-patch [1]给发送补丁的人提意见。
git-revert [1]撤消不好的补丁。
git-push [1] to publish the bleeding edge. 啥意思?


例子

合并补丁的操作记录

$ git status (1)
$ git branch --no-merged master (2)
$ mailx (3)
& s 2 3 4 5 ./+to-apply
& s 7 8 ./+hold-linus
& q
$ git checkout -b topic/one master
$ git am -3 -i -s ./+to-apply (4)
$ compile/test
$ git checkout -b hold/linus && git am -3 -i -s ./+hold-linus (5)
$ git checkout topic/one && git rebase master (6)
$ git checkout pu && git reset --hard next (7)
$ git merge topic/one topic/two && git merge hold/linus (8)
$ git checkout maint
$ git cherry-pick master~4 (9)
$ compile/test
$ git tag -s -m "GIT 0.99.9x" v0.99.9x (10)
$ git fetch ko && for branch in master maint next pu (11)
do
git show-branch ko/$branch $branch (12)
done
$ git push --follow-tags ko (13)


看看你手头正在开发哪些功能。

看有哪些还没有合并的分支代码。

看有没有重要的邮件。

批准可以合并使用的补丁。

根据需要创建主题分支并再次反馈改动。

将可以合并的分支代码rebase并发布,作为稳定分支的一部分。

从下次开始,每次都要重启pu。

and bundle topic branches still cooking.???

backport
一个关键的修复。

创建一个签名的标签。

确保主干代码没有被不小心破坏。

git show-branch
输出中,master应该有一切
ko/master
next
应该有一切
ko/next
都有,等等

git-push [1] to publish the bleeding edge. 啥意思?,以及指向推送新的日志标签。

在这个例子中,koGit维护者在kernel.org的仓库中的简写,如下所示:

(in .git/config)
[remote "ko"]
url = kernel.org:/pub/scm/git/git.git
fetch = refs/heads/*:refs/remotes/ko/*
push = refs/heads/master
push = refs/heads/next
push = +refs/heads/pu
push = refs/heads/maint


存储库管理

存储库管理员使用以下工具来设置和维护开发人员对存储库的访问。

git-daemon [1]允许匿名从存储库下载。

git-shell [1]可以用作 共享中央存储库用户的受限登录shell。

20170926更新,未完待续

git-http-backend [1]提供了允许提取和推送服务的Git-over-HTTP(“Smart http”)的服务器端实现。

gitweb [1]提供了一个Web前端到Git仓库,可以使用git-instaweb [1]脚本进行设置。

更新钩子howto具有管理共享中央存储库的一个很好的例子。

此外,还有一些其他广泛部署的托管,浏览和审查解决方案,如:

gitolite,gerrit代码审查,cgit等。

例子

我们在/ etc / services中假设以下

grep9418/etc/servicesgit9418/tcp#Git版本控制系统从inetd运行git−daemon来服务/pub/scm。 grep git /etc/inetd.conf

git stream tcp nowait nobody \

/ usr / bin / git-daemon git-daemon –inetd –export-all / pub / scm

实际的配置行应该在一行。

从xinetd运行git-daemon来服务/ pub / scm。

$ cat /etc/xinetd.d/git-daemon

#default:off

#description:Git服务器提供对Git存储库的访问

服务git

{

disable =否

type = UNLISTED

port = 9418

socket_type = stream

等待=否

user = nobody

server = / usr / bin / git-daemon

server_args = –inetd –export-all –base-path = / pub / scm

log_on_failure + = USERID

}

检查您的xinetd(8)文档和设置,这是从Fedora系统。其他可能会有所不同。

使用git-over-ssh来推送/拉取访问开发人员。

例如: $ git push/pull ssh://host.xz/pub/scm/project

grepgit/etc/passwd(1)艾丽斯:X:1000:1000::/家/爱丽丝:在/usr/斌/git的壳鲍勃:X:1001:1001::/首页/鲍勃:在/usr/斌/git的壳辛迪:X:1002:1002::/家/辛迪:在/usr/斌/git的壳大卫:X:1003:1003::/家/大卫:在/usr/斌/git的壳 grep git / etc / shells (2)

/ usr / bin / git-shell

登录shell设置为/ usr /斌/ git的外壳,不允许任何东西,但git push和git pull。用户需要ssh访问机器。

在许多发行版中/ etc / shells需要列出什么用作登录shell。

CVS风格的共享存储库。

grepgit/etc/group(1)混帐:X:9418:爱丽丝,鲍勃,辛迪,大卫 cd /home/devo.git

ls−l(2)lrwxrwxrwx1davidgit17Dec422:40HEAD−>refs/heads/masterdrwxrwsr−x2davidgit4096Dec422:40分支−rw−rw−r–1davidgit84Dec422:40config−rw−rw−r–1davidgit58Dec422:40descriptiondrwxrwsr−x2davidgit4096Dec422:40hooks−rw−rw−r–1davidgit37504Dec422:40indexdrwxrwsr−x2davidgit4096Dec422:40infodrwxrwsr−x4davidgit4096Dec422:40对象drwxrwsr−x4davidgit4096Nov714:58refsdrwxrwsr−x2davidgit4096Dec422:40遥控器 ls -l hooks / update (3)

-r-xr-xr-x 1 david git 3536 Dec 4 22:40更新

$ cat info / allowed-users (4)

refs / heads / master alice \ | cindy

refs / heads / doc-update bob

refs / tags / v [0-9] * david

将开发人员放在同一个git组中。

并使该组可共享存储库可写。

使用来自Documentation / howto /的分支策略控制的Carl的update-hook示例。

alice和cindy可以推进主,只有bob可以推入doc-update。david是发行经理,是唯一可以创建和推送版本标签的人员。

GIT

所述的部分GIT中[1]套件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息