.. include:: ../disclaimer-zh_CN.rst :Original: :ref:`Documentation/process/7.AdvancedTopics.rst <development_advancedtopics>` :Translator: 时奎亮 Alex Shi <alex.shi@linux.alibaba.com> :æ ¡è¯‘: å´æƒ³æˆ Wu XiangCheng <bobwxc@email.cn> .. _cn_development_advancedtopics: 高级主题 ======== 现在,希望您能够掌æ¡å¼€å‘æµç¨‹çš„工作方å¼ã€‚然而,还有更多的东西è¦å¦ï¼æœ¬èŠ‚å°†ä»‹ç» ä¸€äº›ä¸»é¢˜ï¼Œè¿™äº›ä¸»é¢˜å¯¹å¸Œæœ›æˆä¸ºLinuxå†…æ ¸å¼€å‘过程常规部分的开å‘人员有帮助。 使用Git管ç†è¡¥ä¸ --------------- å†…æ ¸ä½¿ç”¨åˆ†å¸ƒå¼ç‰ˆæœ¬æŽ§åˆ¶å§‹äºŽ2002å¹´åˆï¼Œå½“æ—¶Linus首次开始使用专有的Bitkeeper应用 程åºã€‚虽然BitKeeperå˜åœ¨äº‰è®®ï¼Œä½†å®ƒæ‰€ä½“现的软件版本管ç†æ–¹æ³•å´è‚¯å®šä¸æ˜¯ã€‚åˆ†å¸ƒå¼ ç‰ˆæœ¬æŽ§åˆ¶å¯ä»¥ç«‹å³åŠ é€Ÿå†…æ ¸å¼€å‘é¡¹ç›®ã€‚çŽ°åœ¨æœ‰å¥½å‡ ç§å…费的BitKeeper替代å“。 ä½†æ— è®ºå¥½åï¼Œå†…æ ¸é¡¹ç›®éƒ½å·²ç»é€‰æ‹©äº†Git作为其工具。 使用Git管ç†è¡¥ä¸å¯ä»¥ä½¿å¼€å‘äººå‘˜çš„ç”Ÿæ´»æ›´åŠ è½»æ¾ï¼Œå°¤å…¶æ˜¯éšç€è¡¥ä¸æ•°é‡çš„增长。Git也 有其粗糙的边角和一定的å±é™©æ€§ï¼Œå®ƒæ˜¯ä¸€ä¸ªå¹´è½»å’Œå¼ºå¤§çš„工具,ä»ç„¶åœ¨å…¶å¼€å‘人员完善 ä¸ã€‚本文档ä¸ä¼šè¯•å›¾æ•™ä¼šè¯»è€…如何使用git;这会是个巨长的文档。相å,这里的é‡ç‚¹ 将是Git如何特别适åˆå†…æ ¸å¼€å‘过程。想è¦åŠ 快用Git速度的开å‘人员å¯ä»¥åœ¨ä»¥ä¸‹ç½‘站上 找到更多信æ¯ï¼š https://git-scm.com/ https://www.kernel.org/pub/software/scm/git/docs/user-manual.html åŒæ—¶ç½‘上也能找到å„ç§å„æ ·çš„æ•™ç¨‹ã€‚ 在å°è¯•ä½¿ç”¨å®ƒç”Ÿæˆè¡¥ä¸ä¾›ä»–人使用之å‰ï¼Œç¬¬ä¸€è¦åŠ¡æ˜¯é˜…读上述网页,对Gitçš„å·¥ä½œæ–¹å¼ æœ‰ä¸€ä¸ªæ‰Žå®žçš„äº†è§£ã€‚ä½¿ç”¨Gitçš„å¼€å‘人员应能进行拉å–主线å˜å‚¨åº“的副本,查询修订 历å²ï¼Œæäº¤å¯¹æ ‘çš„æ›´æ”¹ï¼Œä½¿ç”¨åˆ†æ”¯ç‰æ“作。了解Git用于é‡å†™åŽ†å²çš„工具(如rebase) 也很有用。Git有自己的术è¯å’Œæ¦‚念;Git的新用户应该了解引用ã€è¿œç¨‹åˆ†æ”¯ã€ç´¢å¼•ã€ å¿«è¿›åˆå¹¶ã€æŽ¨æ‹‰ã€æ¸¸ç¦»å¤´ç‰ã€‚一开始å¯èƒ½æœ‰ç‚¹å“人,但这些概念ä¸éš¾é€šè¿‡ä¸€ç‚¹å¦ä¹ æ¥ ç†è§£ã€‚ 使用git生æˆé€šè¿‡ç”µå邮件æ交的补ä¸æ˜¯æé«˜é€Ÿåº¦çš„ä¸€ä¸ªå¾ˆå¥½çš„ç»ƒä¹ ã€‚ 当您准备好开始建立Gitæ ‘ä¾›å…¶ä»–äººæŸ¥çœ‹æ—¶ï¼Œæ— ç–‘éœ€è¦ä¸€ä¸ªå¯ä»¥ä»Žä¸æ‹‰å–çš„æœåŠ¡å™¨ã€‚ 如果您有一个å¯ä»¥è®¿é—®å› 特网的系统,那么使用git-daemonè®¾ç½®è¿™æ ·çš„æœåŠ¡å™¨ç›¸å¯¹ 简å•ã€‚åŒæ—¶ï¼Œå…费的公共托管网站(例如github)也开始出现在网络上。æˆç†Ÿçš„å¼€å‘ äººå‘˜å¯ä»¥åœ¨kernel.org上获得一个å¸æˆ·ï¼Œä½†è¿™äº›å¸æˆ·å¹¶ä¸å®¹æ˜“得到;更多有关信æ¯ï¼Œ 请å‚阅 https://kernel.org/faq/ 。 æ£å¸¸çš„Git工作æµç¨‹æ¶‰åŠåˆ°è®¸å¤šåˆ†æ”¯çš„使用。æ¯ä¸€æ¡å¼€å‘线都å¯ä»¥åˆ†ä¸ºå•ç‹¬çš„“主题 分支â€ï¼Œå¹¶ç‹¬ç«‹ç»´æŠ¤ã€‚Git的分支很容易使用,没有ç†ç”±ä¸ä½¿ç”¨å®ƒä»¬ã€‚而且,在任何 情况下,您都ä¸åº”该在任何您打算让其他人从ä¸æ‹‰å–的分支ä¸è¿›è¡Œå¼€å‘。应该å°å¿ƒåœ° 创建公开å¯ç”¨çš„分支;当开å‘分支处于完整状æ€å¹¶å·²å‡†å¤‡å¥½æ—¶(而ä¸æ˜¯ä¹‹å‰ï¼‰æ‰åˆå¹¶ å¼€å‘分支的补ä¸ã€‚ Gitæ供了一些强大的工具,å¯ä»¥è®©æ‚¨é‡å†™å¼€å‘历å²ã€‚一个ä¸æ–¹ä¾¿çš„è¡¥ä¸ï¼ˆæ¯”如说, ä¸€ä¸ªæ‰“ç ´äºŒåˆ†æ³•çš„è¡¥ä¸ï¼Œæˆ–者有其他一些明显的缺陷)å¯ä»¥åœ¨é€‚当的ä½ç½®ä¿®å¤ï¼Œæˆ–者 完全从历å²ä¸æ¶ˆå¤±ã€‚一个补ä¸ç³»åˆ—å¯ä»¥è¢«é‡å†™ï¼Œå°±å¥½åƒå®ƒæ˜¯åœ¨ä»Šå¤©çš„ä¸»çº¿ä¸Šå†™çš„ä¸€æ ·ï¼Œ å³ä½¿ä½ å·²ç»èŠ±äº†å‡ 个月的时间在写它。å¯ä»¥é€æ˜Žåœ°å°†æ›´æ”¹ä»Žä¸€ä¸ªåˆ†æ”¯è½¬ç§»åˆ°å¦ä¸€ä¸ª 分支。ç‰ç‰ã€‚明智地使用git修改历å²çš„能力å¯ä»¥å¸®åŠ©åˆ›å»ºé—®é¢˜æ›´å°‘的干净补ä¸é›†ã€‚ 然而,过度使用这ç§åŠŸèƒ½å¯èƒ½ä¼šå¯¼è‡´å…¶ä»–问题,而ä¸ä»…仅是对创建完美项目历å²çš„ 简å•ç—´è¿·ã€‚é‡å†™åŽ†å²å°†é‡å†™è¯¥åŽ†å²ä¸åŒ…å«çš„更改,将ç»è¿‡æµ‹è¯•ï¼ˆå¸Œæœ›å¦‚æ¤ï¼‰çš„å†…æ ¸æ ‘ å˜ä¸ºæœªç»æµ‹è¯•çš„å†…æ ¸æ ‘ã€‚é™¤æ¤ä¹‹å¤–,如果开å‘人员没有共享项目历å²ï¼Œä»–ä»¬å°±æ— æ³• è½»æ¾åœ°å作;如果您é‡å†™äº†å…¶ä»–å¼€å‘人员拉入他们å˜å‚¨åº“的历å²ï¼Œæ‚¨å°†ä½¿è¿™äº›å¼€å‘ äººå‘˜çš„ç”Ÿæ´»æ›´åŠ å›°éš¾ã€‚å› æ¤ï¼Œè¿™é‡Œæœ‰ä¸€ä¸ªç®€å•çš„ç»éªŒæ³•åˆ™ï¼šè¢«å¯¼å‡ºåˆ°å…¶ä»–åœ°æ–¹çš„åŽ†å² åœ¨æ¤åŽé€šå¸¸è¢«è®¤ä¸ºæ˜¯ä¸å¯å˜çš„。 å› æ¤ï¼Œä¸€æ—¦å°†ä¸€ç»„更改推é€åˆ°å…¬å¼€å¯ç”¨çš„æœåŠ¡å™¨ä¸Šï¼Œå°±ä¸åº”该é‡å†™è¿™äº›æ›´æ”¹ã€‚如果您 å°è¯•å¼ºåˆ¶è¿›è¡Œæ— 法快进åˆå¹¶çš„更改(å³ä¸å…±äº«åŒä¸€åŽ†å²è®°å½•çš„更改),Gitå°†å°è¯•å¼ºåˆ¶ 执行æ¤è§„则。这å¯èƒ½è¦†ç›–检查,有时甚至需è¦é‡å†™å¯¼å‡ºçš„æ ‘ã€‚åœ¨æ ‘ä¹‹é—´ç§»åŠ¨å˜æ›´é›†ä»¥ é¿å…linux-nextä¸çš„冲çªå°±æ˜¯ä¸€ä¸ªä¾‹å。但这ç§è¡Œä¸ºåº”该是罕è§çš„。这就是为什么 å¼€å‘应该在ç§æœ‰åˆ†æ”¯ä¸è¿›è¡Œï¼ˆå¿…è¦æ—¶å¯ä»¥é‡å†™ï¼‰å¹¶ä¸”åªæœ‰åœ¨å…¬å…±åˆ†æ”¯å¤„于åˆç†çš„较新 状æ€æ—¶æ‰è½¬ç§»åˆ°å…¬å…±åˆ†æ”¯ä¸çš„åŽŸå› ä¹‹ä¸€ã€‚ 当主线(或其他一组å˜æ›´æ‰€åŸºäºŽçš„æ ‘ï¼‰å‰è¿›æ—¶ï¼Œå¾ˆå®¹æ˜“ä¸Žè¯¥æ ‘åˆå¹¶ä»¥ä¿æŒé¢†å…ˆåœ°ä½ã€‚ 对于一个ç§æœ‰çš„分支,rebasing å¯èƒ½æ˜¯ä¸€ä¸ªå¾ˆå®¹æ˜“跟上å¦ä¸€æ£µæ ‘的方法,但是一旦 ä¸€æ£µæ ‘è¢«å¯¼å‡ºåˆ°å¤–ç•Œï¼Œrebasingå°±ä¸å¯å–了。一旦å‘生这ç§æƒ…况,就必须进行完全 åˆå¹¶ï¼ˆmerge)。åˆå¹¶æœ‰æ—¶æ˜¯å¾ˆæœ‰æ„义的,但是过于频ç¹çš„åˆå¹¶ä¼šä¸å¿…è¦åœ°æ‰°ä¹±åŽ†å²ã€‚ 在这ç§æƒ…况下建议的åšæ³•æ˜¯ä¸è¦é¢‘ç¹åˆå¹¶ï¼Œé€šå¸¸åªåœ¨ç‰¹å®šçš„å‘布点(如主线-rcå‘布) åˆå¹¶ã€‚å¦‚æžœæ‚¨å¯¹ç‰¹å®šçš„æ›´æ”¹æ„Ÿåˆ°ç´§å¼ ï¼Œåˆ™å¯ä»¥å§‹ç»ˆåœ¨ç§æœ‰åˆ†æ”¯ä¸æ‰§è¡Œæµ‹è¯•åˆå¹¶ã€‚在 è¿™ç§æƒ…况下,git“rerereâ€å·¥å…·å¾ˆæœ‰ç”¨ï¼›å®ƒèƒ½è®°ä½åˆå¹¶å†²çªæ˜¯å¦‚ä½•è§£å†³çš„ï¼Œè¿™æ ·æ‚¨ å°±ä¸å¿…é‡å¤ç›¸åŒçš„工作。 关于Gitè¿™æ ·çš„å·¥å…·çš„ä¸€ä¸ªæœ€å¤§çš„åå¤æŠ±æ€¨æ˜¯ï¼šè¡¥ä¸ä»Žä¸€ä¸ªå˜å‚¨åº“到å¦ä¸€ä¸ªå˜å‚¨åº“çš„ 大é‡ç§»åŠ¨ä½¿å¾—很容易陷入错误建议的å˜æ›´ä¸ï¼Œè¿™äº›å˜æ›´é¿å¼€å®¡æŸ¥é›·è¾¾è¿›å…¥ä¸»çº¿ã€‚当内 æ ¸å¼€å‘人员看到这ç§æƒ…况å‘生时,他们往往会感到ä¸é«˜å…´ï¼›åœ¨Gitæ ‘ä¸Šæ”¾ç½®æœªå®¡é˜…æˆ– 主题外的补ä¸å¯èƒ½ä¼šå½±å“您将æ¥è®©æ ‘被拉å–的能力。引用Linusçš„è¯: :: ä½ å¯ä»¥ç»™æˆ‘å‘è¡¥ä¸ï¼Œä½†å½“æˆ‘ä»Žä½ é‚£é‡Œæ‹‰å–一个Gitè¡¥ä¸æ—¶ï¼Œæˆ‘需è¦çŸ¥é“ä½ æ¸…æ¥š 自己在åšä»€ä¹ˆï¼Œæˆ‘需è¦èƒ½å¤Ÿç›¸ä¿¡äº‹æƒ…而 *æ— éœ€* 手动检查æ¯ä¸ªå•ç‹¬çš„更改。 (http://lwn.net/Articles/224135/)。 为了é¿å…è¿™ç§æƒ…况,请确ä¿ç»™å®šåˆ†æ”¯ä¸çš„所有补ä¸éƒ½ä¸Žç›¸å…³ä¸»é¢˜ç´§å¯†ç›¸å…³ï¼›â€œé©±åŠ¨ç¨‹åº ä¿®å¤â€åˆ†æ”¯ä¸åº”æ›´æ”¹æ ¸å¿ƒå†…å˜ç®¡ç†ä»£ç 。而且,最é‡è¦çš„是,ä¸è¦ä½¿ç”¨Gitæ ‘æ¥ç»•è¿‡ 审查过程。ä¸æ—¶çš„å°†æ ‘çš„æ‘˜è¦å‘布到相关的列表ä¸ï¼Œåœ¨åˆé€‚时候请求linux-nextä¸ åŒ…å«è¯¥æ ‘。 如果其他人开始å‘é€è¡¥ä¸ä»¥åŒ…å«åˆ°æ‚¨çš„æ ‘ä¸ï¼Œä¸è¦å¿˜è®°å®¡é˜…它们。还è¦ç¡®ä¿æ‚¨ç»´æŠ¤æ£ç¡® 的作者信æ¯ï¼› git “amâ€å·¥å…·åœ¨è¿™æ–¹é¢åšå¾—最好,但是如果补ä¸é€šè¿‡ç¬¬ä¸‰æ–¹è½¬å‘给您, 您å¯èƒ½éœ€è¦åœ¨è¡¥ä¸ä¸æ·»åŠ “From:â€è¡Œã€‚ 请求拉å–时,请务必æ供所有相关信æ¯ï¼šæ ‘çš„ä½ç½®ã€è¦æ‹‰å–的分支以åŠæ‹‰å–将导致的 æ›´æ”¹ã€‚åœ¨è¿™æ–¹é¢ git request-pull 命令éžå¸¸æœ‰ç”¨ï¼›å®ƒå°†æŒ‰ç…§å…¶ä»–å¼€å‘人员所期望的 æ ¼å¼åŒ–请求,并检查以确ä¿æ‚¨å·²è®°å¾—将这些更改推é€åˆ°å…¬å…±æœåŠ¡å™¨ã€‚ å®¡é˜…è¡¥ä¸ -------- 一些读者显然会å对将本节与“高级主题â€æ”¾åœ¨ä¸€èµ·ï¼Œå› 为å³ä½¿æ˜¯åˆšå¼€å§‹çš„å†…æ ¸å¼€å‘人员 也应该审阅补ä¸ã€‚当然,没有比查看其他人å‘布的代ç 更好的方法æ¥å¦ä¹ å¦‚ä½•åœ¨å†…æ ¸çŽ¯å¢ƒ ä¸ç¼–程了。æ¤å¤–,审阅者永远供ä¸åº”求;通过审阅代ç ,您å¯ä»¥å¯¹æ•´ä¸ªæµç¨‹åšå‡ºé‡å¤§è´¡çŒ®ã€‚ 审查代ç å¯èƒ½æ˜¯ä¸€å‰¯ä»¤äººç”Ÿç•çš„å›¾æ™¯ï¼Œç‰¹åˆ«æ˜¯å¯¹ä¸€ä¸ªæ–°çš„å†…æ ¸å¼€å‘人员æ¥è¯´ï¼Œä»–们 å¯èƒ½ä¼šå¯¹å…¬å¼€è¯¢é—®ä»£ç æ„Ÿåˆ°ç´§å¼ ï¼Œè€Œè¿™äº›ä»£ç 是由那些有更多ç»éªŒçš„人å‘布的。ä¸è¿‡ï¼Œ å³ä½¿æ˜¯æœ€æœ‰ç»éªŒçš„å¼€å‘人员编写的代ç 也å¯ä»¥å¾—到改进。也许对(所有)审阅者最好 的建议是:把审阅评论当æˆé—®é¢˜è€Œä¸æ˜¯æ‰¹è¯„。询问“在这æ¡è·¯å¾„ä¸å¦‚何释放é”?†总是比说“这里的é”是错误的â€æ›´å¥½ã€‚ ä¸åŒçš„å¼€å‘人员将从ä¸åŒçš„角度审查代ç 。部分人会主è¦å…³æ³¨ä»£ç é£Žæ ¼ä»¥åŠä»£ç 行是 å¦æœ‰å°¾éšç©ºæ ¼ã€‚其他人会主è¦å…³æ³¨è¡¥ä¸ä½œä¸ºä¸€ä¸ªæ•´ä½“实现的å˜æ›´æ˜¯å¦å¯¹å†…æ ¸æœ‰å¥½å¤„ã€‚ åŒæ—¶ä¹Ÿæœ‰äººä¼šæ£€æŸ¥æ˜¯å¦å˜åœ¨é”问题ã€å †æ ˆä½¿ç”¨è¿‡åº¦ã€å¯èƒ½çš„安全问题ã€åœ¨å…¶ä»–地方 å‘现的代ç é‡å¤ã€è¶³å¤Ÿçš„文档ã€å¯¹æ€§èƒ½çš„ä¸åˆ©å½±å“ã€ç”¨æˆ·ç©ºé—´ABI更改ç‰ã€‚所有类型 的检查,åªè¦å®ƒä»¬èƒ½å¼•å¯¼æ›´å¥½çš„代ç è¿›å…¥å†…æ ¸ï¼Œéƒ½æ˜¯å—欢迎和值得的。