[ADD] awesome window-manager config file.
[arrow.git] / viki / misc / git-mail.viki
blobbbcfa3ffb9468c745740d75325876edce7acfe92
1 ref:http://www.gentoo-cn.org/doc/zh_cn/git-howto.xml
2 基于git的Gentoo中文文档开发流程
3 内容:
5 1.  准备工作
7 安装git
9 注意: 请加上curl和tk USE标记。前者可以让你获取http协议的仓库,后者可以让你使用gitk工具。
11 代码 1.1: 安装git
13 $ euse -E curl tk
14 $ emerge -av dev-util/git
16 默认:安装和配置msmtp
18 代码 1.2: 安装msmtp
20 $ emerge -av msmtp
22 然后设置msmtp,修改~/.msmtprc并设定权限:
24 代码 1.3: 修改~/.msmtprc并设定权限
26 $ cat > ~/.msmtprc
27 defaults
28 tls on
29 tls_trust_file /etc/ssl/certs/ca-certificates.crt
30 account gmail
31 host smtp.gmail.com
32 from yourname@gmail.com
33 auth on
34 user yourname@gmail.com
35 password yourpassword
36 port 587
37 account default:gmail
38 $ chmod 600 ~/.msmtprc
40 请用你的email地址和密码代替上面的yourname@gmail.com和yourpassword。
42 备选:安装和配置ssmtp
44 代码 1.4: 安装ssmtp
46 $ emerge -av ssmtp
48 ssmtp的配置文件分别存储在/etc/ssmtp/ssmtp.conf和/etc/ssmtp/revaliases内。
50 代码 1.5: 修改/etc/ssmtp/ssmtp.conf
52 root=yourname@gmail.com
53 mailhub=smtp.gmail.com:587
54 rewriteDomain=
55 hostname=yourname@gmail.com
56 UseSTARTTLS=YES
57 AuthUser=yourname
58 AuthPass=yourpassword
59 FromLineOverride=YES
61 代码 1.6: 修改/etc/ssmtp/revaliases
63 root:yourname@gmail.com:smtp.gmail.com:587
64 user:yourname@gmail.com:smtp.gmail.com:587
66 请用你的email地址和密码代替上面的yourname@gmail.com和yourpassword,用你在的Gentoo Linux登录的用户名代替user。
68 配置git
70 安装好了smtp程序之后,我们来配置git本身。git的每个递交都会关联作者的email信息。在1.5.2.2版及以后的git中,可以使用git-config工具来设定git的一些全局变量。
72 代码 1.7: 设置自己的姓名、email地址及smtp服务器程序
74 $ git-config --global user.name 'Your Name'
75 $ git-config --global user.email 'yourname@gmail.com'
76 $ git-config --global sendemail.smtpserver "/usr/sbin/sendmail"
78 同样,用你自己的名字、email地址代替上面的Your Name和yourname@gmail.com。Gentoo里安装smtp服务器程序时都会附带安装一个/usr/sbin/sendmail符号连接,指向真正的smtp服务器程序可执行文件。所以直接把smtp服务器设定为此符号连接即可。
80 如此设置后,这些信息就会保存在~/.gitconfig文件中,作为用户个人的全局user相关设置。
82 获取主拷贝
84 开始工作前,首先在本地复制一个完整的主拷贝。
86 代码 1.8: 获取现有的主拷贝
88 $ cd /path/to/work
89 $ git clone http://www.gentoo-cn.org/git/gentoo-cn.git
91 命令成功以后,会创建一个gentoo-cn目录。里面的有个隐藏的.git目录,称为repository,包含了所有的历史数据。repository以外的其他文件称为工作拷贝(working copy),对其进行修改/删除不会影响repository的内容。Repository好比cvs/svn服务器中的内容,工作拷贝好比cvs /svn在客户端checkout出来的内容,可以随便修改。repository默认有一个分支(branch),叫master。当前分支的最新版本叫HEAD。和cvs/svn不同的是,基于git的开发是完全分布式的,没有一个集中的repository,任何开发者不但拥有工作拷贝,而且拥有所有的修改历史。这种开发方式给予开发者更多的信息和更大空间及自由度。
93 下一步请创建一个本地(local)分支并检出此分支。
95 代码 1.9: 创建并检出本地分支
97 $ cd gentoo-cn
98 $ git checkout -b local                   # 创建并检出分支
99 $ git branch                              # 显示分支
100   master
101 * local                                          # 带*的为当前活动分支
103 注意: 以后所有的修改都请只在本地分支里进行。
105 这时可以先用gitk看看当前的修改历史。
107 代码 1.10: 使用gitk --all可以通过图形方式查看项目的所有分支结构和历史修改
109 $ gitk --all
111 2.  编辑修改
113 修改/添加/删除文件
115 完成上述准备工作后,你就可以开始你的正式工作了。你可以修改现有的文件,也可以添加新文件或删除文件。我们以添加一个文件为例,来看看如何利用git进行管理。
117 代码 2.1: 在工作目录中添加一个文件
119 $ echo "this is a test" > new_file.xml
121 检查所做的修改
123 你可以随时用git status和git diff查看目前的工作拷贝和repository HEAD的差别。
125 代码 2.2: 建立新文件后git status输出的结果
127 $ git status
128 # On branch local
129 # Untracked files:
130 #   (use "git add <file>..." to include in what will be committed)
132 #       new_file.xml
133 nothing added to commit but untracked files present (use "git add" to track)
135 添加文件到repository
137 上述git status输出表明新文件new_file.xml还没有添加到repository。你可以用git add完成这个任务。对修改和删除的已有的文件不需要额外步骤。另外由于此文件是新加入的,现在使用git diff将不会显示任何结果。
139 代码 2.3: 添加文件
141 $ git add new_file.xml
142 $ git status
143 # On branch local
144 # Changes to be committed:
145 #   (use "git reset HEAD <file>..." to unstage)
147 #       new file:   new_file.xml
150 3.  提交修改
152 用git commit提交你的修改
154 你可以随时用git commit提交你的修改。刚开始使用git时,可以尽量多提交。因为和cvs/svn不同,这个拷贝是你个人的,你应该经常保存你的工作。你日后还可以对你的这些工作进一步整理,例如,合并多个提交结果,修改提交信息等,来形成最终可以发布到Gentoo China邮件列表的工作。
156 代码 3.1: 提交你的修改
158 $ git commit -a -s -m "added a new file"
159 Created commit 96ffadde5682bc9b3d96582822bc4e75e8dccdca
160  1 files changed, 1 insertions(+), 0 deletions(-)
161  create mode 100644 new_file.xml
163 和cvs/svn一样,你需要填写一个描述此次修改的简短信息。对于自己使用的临时提交,信息可以比较随便。
165 用gitk或者git diff查看新的历史
167 代码 3.2: 使用git diff
169 $ git diff HEAD^..HEAD
170 diff --git a/new_file.xml b/new_file.xml
171 new file mode 100644
172 index 0000000..0527e6b
173 --- /dev/null
174 +++ b/new_file.xml
175 @@ -0,0 +1 @@
176 +This is a test
178 git diff HEAD可以查看工作拷贝和HEAD的差别。git diff HEAD^..HEAD用于查看最后一次提交所作的修改。HEAD^表示最新版HEAD的上一个版本。类似的名称还有:HEAD^^,HEAD~2,local^^^,tag_name,提交对应SHA1哈希的前几位(用gitk或git whatchanged可以查看提交对应的哈希值)等等。请查看man git-rev-parse以获取更多有关信息。
180 4.  发布修改
182 整理你的个人提交
184 往往你需要对你的个人提交进行整理。尤其是当你想发布你的工作时,一般希望把之前的很多次提交集中起来。假设你还进行了如下的改动。
186 代码 4.1: 更多的修改
188 $ echo "this is the second line" >> new_file.xml
189 $ git diff
190 diff --git a/new_file.xml b/new_file.xml
191 index 90bfcb5..030e90b 100644
192 --- a/new_file.xml
193 +++ b/new_file.xml
194 @@ -1 +1,2 @@
195  this is a test
196 +this is the second line
197 $ git commit -a -s -m "some more log"
198 Created commit 1958506a599d1bcecd38fb4879b3483545226ef4
199  1 files changed, 1 insertions(+), 0 deletions(-)
200 $ git whatchanged HEAD^^..HEAD
201 commit 1958506a599d1bcecd38fb4879b3483545226ef4
202 Author: Xudong Guan <xudong.guan@gmail.com>
203 Date:   Fri Jul 13 16:44:07 2007 +0100
205     some more log
207 :100644 100644 90bfcb5... 030e90b... M  new_file.xml
209 commit 96ffadde5682bc9b3d96582822bc4e75e8dccdca
210 Author: Xudong Guan <xudong.guan@gmail.com>
211 Date:   Fri Jul 13 16:28:08 2007 +0100
213     some log
215 :000000 100644 0000000... 90bfcb5... A  new_file.xml
217 此时你希望将上两次修改的commit合二为一,再发布,这时可以通过如下的步骤。
219 代码 4.2: 整理你的上两个提交为一个新的提交
221 $ git reset --soft HEAD^^                 # 回退两个历史,但保留工作拷贝
222 $ git status
223 # On branch local
224 # Untracked files:
225 #   (use "git add <file>..." to include in what will be committed)
227 #       new_file.xml
228 nothing added to commit but untracked files present (use "git add" to track)
229 $ git commit -a -m "Added new file new_file.xml
231 > 张兄,这是一个新添加的文件,他的用途主要是演示
232 > 如何使用git.
234 > 欢迎兄弟们使用。
235 > "
237 此时你现在的local分支保存了一个整理好的提交。同时写了一个更加详细的提交描述。现在建议用gitk --all看看两个分支的可视化效果。
239 由于本次提交需要发布,所以最好按照如下格式填写你的提交描述。
241 代码 4.3: 提交描述信息的格式
243 Added new file new_file.xml
245 张兄,这是一个新添加的文件,他的用途主要是演示
246 如何使用git.
248 欢迎兄弟们使用。
250 信息中的第一行简要描述此次修改的主题,它同时也会是将来发送到邮件列表上时的邮件主题。第一行后请空一行,然后象写邮件正文一行,详细描述你的修改。描述使用中文或英文都可以,但是标题使用中文的话,git将来生成提交的patch邮件文件名时,会把中文过滤掉。
252 发布你的修改
254 当你要发布你的工作时,你可以用git format-patch产生补丁并用git send-email将补丁发送到Gentoo China邮件列表(如果只是用于测试,可以发到一个个人的邮箱)。不过,与cvs/svn类似的是,补丁产生前之前应该先更新master分支,并且将本地分支rebase到master分支。rebase的概念类似于合并,但和git merge不完全一样。详情请查阅man git-rebase。
256 代码 4.4: 更新master分支且将本地分支rebase到master分支
258 $ git checkout master                     # 检出master
259 $ git pull                                # 更新master
260 $ git checkout local                      # 检出local
261 $ git rebase master                       # rebase到master
263 如果你在local分支的修改和master里的修改有冲突,这rebase就会中断,并且提示你哪个文件中发生了冲突以及你应该怎样做。此时你应该手工解决冲突,然后执行提示的命令。
265 代码 4.5: 解决冲突
267 $ vi new_file.xml                         # 解决文件中的冲突
268 $ git add new_file.xml                    # 标记为冲突已解决
269 $ git rebase --continue                   # 继续rebase
271 所有冲突解决完后,请用git format-patch自动生成要发布的邮件。
273 代码 4.6: 用git format-patch自动生成要发布的邮件
275 $ git format-patch master                 # 创建补丁
276 0001-Added-new-file-new_file.xml.patch
278 代码 4.7: 用git send-email发送邮件
280 $ git send-email 0001-Added-file-new_file_xml.patch --to gentoo-china@googlegroups.com
282 5.  接收补丁
284 维护人员/开发者接收你的补丁
286 你的邮件发到列表上后,会有一定的反馈意见。你在听取修改意见后可以再次发布。你的发布可以被维护人员接收到主拷贝。其他开发者也可以不通过主拷贝,而是通过邮件直接获得你的工作(me是用来加上接收人的Sign-off行的)。
288 首先你需要把补丁邮件接收到本地,并保存邮件全文到一个文件,比如tmp.txt。然后你可以使用git am。
290 代码 5.1: 接收他人工作
292 $ git am -s tmp.txt
294 假如打补丁失败,在修正补丁后,执行:
296 代码 5.2: 修正补丁之后
298 $ git am -s -r
301 本文档的内容遵循知识共享-署名-相同方式共享许可协议
303         
305 打印
307 更新于2008年 3月 2日
309 本翻译的原始版本已经不再被维护
311 总结: 本文介绍了如何使用git来进行gentoo中文文档翻译工作的开发。本文的读者不需要有任何git基础。读完本文后,读者应该可以将自己的翻译或对现有工作的修改以补丁的形式发布到gentoo-china邮件列表上,供维护人员评阅和采纳。
313 管旭东
314 作者
316 张乐
317 编辑
319 程任全
320 贡献者
322 吴峰光
323 贡献者
325 江泽洲
326 贡献者
328 苏永恒
329 贡献者
331 井诚
332 贡献者
334 Donate to support our development efforts.
335 Gentoo Centric Hosting: vr.org
337 VR Hosted
338 Tek Alchemy
340 Tek Alchemy
341 SevenL.net
343 SevenL.net
344 Global Netoptex Inc.
346 Global Netoptex Inc.
347 Copyright 2001-2008 Gentoo Foundation, Inc. Questions, Comments? Contact us.