亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? main.tex

?? linux下各種patch的管理工具
?? TEX
?? 第 1 頁 / 共 3 頁
字號:
%\documentclass[a4paper]{article}\documentclass{article}\usepackage{graphicx}\usepackage{subfigure}\usepackage{fancyvrb}%\usepackage{times}\usepackage[latin1]{inputenc}\usepackage{url}%\usepackage{lineno}%\linenumbers%\renewcommand{\baselinestretch}{1.5}% Change url font to textsf (and check what breaks in PDF/HTML/...)\fvset{xleftmargin=3em,commandchars=\\\{\}}\newcommand{\quilt}[1]{\textsf{quilt #1}}\newcommand{\sh}[1]{\textsl{#1}}\newcommand{\prog}[1]{\textit{#1}}\title{How To Survive With Many Patches\\{\Large or}\\Introduction to Quilt\footnote{	Quilt is a GPL licensed project hosted on GNU Savannah. Some ideas	for this document were taken from \textit{docco.txt} in	Andrew Morton's patch management scripts package~\cite{akpm02}.	The text in the examples was taken from \textit{A Midsummer	Night's Dream} by William Shakespeare.}}\author{Andreas Gr黱bacher, SuSE Labs \\%\em{SUSE Labs, SUSE LINUX AG} \\{\normalsize agruen@suse.de}}%\date{}\begin{document}\maketitle\thispagestyle{empty}\begin{abstract}After looking at different strategies for dealing with software packagesthat consist of a base software package on top of which a number ofpatches are applied, this document introduces the script collection\textit{quilt,} which was specifically written to help deal withmultiple patches and common patch management tasks.\end{abstract}\section{Introduction}% Prerequisites: UNIX, patches, using GNU diff and GNU patch.% Why patches in the first place?In the old days, vendor specific software packages in the open sourceworld consisted of a file with the official version of the software,plus a patch file with the additional changes needed to adapt thepackage to specific needs. The official software package was usuallycontained in a \textsf{package.tar.gz} file, while the patch was foundin \textsf{package.diff.} Instead of modifying the officialpackage sources, local changes were kept separate. When building thesoftware package, the tar archive was extracted, and the patch wasapplied.Over time, the patch file ended up containing several independentchanges. Of those changes, some were integrated into later versions ofthe software, while other add-ons or adaptations remain external. Whenevera new official version was integrated, the patch needed to be revised:changes that were already integrated in the official version needed tobe split from changes that were not.A big improvement was to allow multiple patches in a vendor package,and this is also how patches are handled today: a number ofpatches is applied on top of each other. Each patch usually consists ofa logically related set of changes. When some patches get integratedupstream, those patches can simply be removed from the vendor specificpackage. The remaining patches frequently continue to apply cleanly.Some of the remaining patches may have to be maintained across a rangeof upstream versions because they are too specific for the upstreamsoftware package, etc. These patches often get out of sync, and need tobe updated.For the majority of packages, the number of patches remains relativelylow, so maintaining those patches without tools is feasible. A number ofpackages have dozens of patches, however. At the extreme end is thekernel source package (kernel-source-\textit{2.4.x}) with more than1\,000 patches.  The difficulty of managing such a vast number ofpatches without tools can easily be imagined.This document discusses different strategies of dealing with large setsof patches. Patches are usually generated by the \prog{diff} utility,and applied with the \prog{patch} utility.  Different patch file formats aredefined as part of the specification of the \prog{diff} utility inPOSIX.1~\cite{posix-2001-diff}.  The most commonly used format today,\textit{unified diff,} is not covered by POSIX.1, however.  A gooddescription of patch file formats is found in the \prog{GNU diff} infopages~\cite{info-diff}.The question we try to answer in this document is how patches are best keptup to date in face of changes both to the upstream software package, andto the patches that precede them.  After looking at some existingapproaches, a collection of patch management scripts known as\textit{quilt} is described~\cite{quilt}, starting with basic concepts,and progressing towards more advanced tasks.% - quilt% (wet people's mouths about the features)% How exactly does this relate to many patches?\section{Existing Approaches}\label{sec:existing}The minimal solution for updating a patch is to apply all precedingpatches.%\footnote{ In the kernel CVS, we have a a script called%\textit{sequence-patch} that simply applies all patches up to a%specified patch.  }Then, a copy of the resulting source tree is created.\footnote{	The two copies can also be hard-linked with each other, which	significantly speeds up both the copying and the final	``diffing''. If hard links are used, care must be taken that the	tools used to update one copy of the source tree will create new	files, and will not overwrite shared files. Editors like	\prog{emacs} and \prog{vi}, and utilities like \prog{patch},	support this.} The next patch in the sequence of patches (which is the one to beupdated) is applied to only one of these source trees. This source treeis then modified until it reflects the desired result. The new version ofthe patch is distilled by comparing the two source trees with\prog{diff}, and writing the result into a file.This simple approach is rather error prone, and leaves much to bedesired. Several people have independently written scripts thatautomate and improve upon this process.A version control system like \prog{CVS} or \prog{RCS} may be areasonable alternative in some cases. The version control system isbrought in the state of the working tree with a number of patchesapplied. Then the next patch is applied. After the working tree isupdated as required, a diff between the repository copy and the workingtree is created (with \prog{cvs diff}, etc). In this scenario theversion control system is used to store and compare against the oldrepository version only. The full version control overhead is paid,while only a small fraction of its functionality is needed. Switchingbetween different patches is not simplified.% TODO: Mention some approaches here; RCS and CVS ...One of the most advanced approaches is Andrew Morton's patch managementscripts~\cite{akpm02}.  The author of this document found that none ofthe available solutions would scale up to the specific requirements ofthe SUSE kernel-source package, and started to improve Andrew Morton'sscripts until they became what they are now~\cite{quilt}.% - Re and Rd scripts (Czech scripts using RCS, replaces the%   now-obsolete rpmpatch that supports one .dif only).% - Werner's scripts% What couldn't be done:% - Patches in sub-directories% - Many patches% - Retaining documentation (akpm's scripts do part of this)% Actually merging rejects is not handled; use tools like:% - wiggle% - Other merge tools (e.g., graphical ones)\section{Quilt: Basic Concepts and Operation}\label{sec:basic}The remainder of this document discusses the script collection\textit{quilt.}With quilt, all work occurs within a single directory tree. Sinceversion 0.30, commands can be invoked from anywhere within the sourcetree.  Commands are of the form ``\quilt{cmd},'' similar to CVScommands. They can be abbreviated as long as the specified part of thecommand is unique. All commands print some help text with ``\quilt{cmd-h}.''Quilt manages a stack of patches. Patches are applied incrementally ontop of the base tree plus all preceding patches. They can be pushedon top of the stack (\quilt{push}), and popped off the stack(\quilt{pop}).  Commands are available for querying the contents of theseries file (\quilt{series}, see below), the contents of the stack(\quilt{applied}, \quilt{previous}, \quilt{top}), and the patches thatare not applied at a particular moment (\quilt{next}, \quilt{unapplied}).By default, most commands apply to the topmost patch on the stack.When files in the working directory are changed, those changes becomepart of the working state of the topmost patch, provided that thosefiles are part of the patch. Files that are not part of a patch must beadded before modifying them so that quilt is aware of the originalversions of the files. The \quilt{refresh} command regenerates a patch.After the refresh, the patch and the working state are the same.Patch files are located in the \textsf{patches} sub-directory of thesource tree (see Figure~\ref{fig:dir-layout}). The \textsf{QUILT\_PATCHES}environment variable can be used to override this location. The\textsf{patches} directory may contain sub-directories.\textsf{patches} may also be a symbolic link instead of a directory.A file called \textsf{series} contains a list of patch file names thatdefines the order in which patches are applied. Unless there are meansby which series files can be generated automatically (seeSection~\ref{sec:rpm}), they are usually provided along with a set ofpatches. In \textsf{series}, each patch file name is on a separate line.Patch files are identified by pathnames that are relative to the\textsf{patches} directory; patches may be in sub-directories below the\textsf{patches} directory.  Lines in the series file that start with ahash character (\texttt{\#}) are ignored.  When quilt adds, removes, orrenames patches, it automatically updates the series file.  Users ofquilt can modify series files while some patches are applied, as long asthe applied patches remain in their original order.Different series files can be used to assemble patches in different ways,corresponding for example to different development branches.\begin{figure}\begin{center}\begin{minipage}{6cm}\begin{small}\begin{Verbatim}work/ -+- ...       |- patches/ -+- series       |            |- patch2.diff       |            |- patch1.diff       |            +- ...       +- .pc/ -+- applied-patches                |- patch1.diff/ -+- ...                |- patch2.diff/ -+- ...                +- ...\end{Verbatim}\end{small}\end{minipage}\caption{Quilt files in a source tree.}\label{fig:dir-layout}\end{center}\end{figure}Before a patch is applied (or ``pushed on the stack''), copies of allfiles the patch modifies are saved to the \textsf{.pc/\textit{patch}}directory.\footnote{	The patch name with extensions stripped is used as the name of	the sub-directory below the \textsf{.pc} directory.  \prog{GNU patch},	which quilt uses internally to apply patches, creates backup	files and applies the patch in one step.} The patch is added to the list ofcurrently applied patches (\textsf{.pc/applied-patches}).  Later when a patch is regenerated(\quilt{refresh}), the backup copies in \textsf{.pc/\textit{patch}} arecompared with the current versions of the files in the source treeusing \prog{GNU diff}.Documentation related to a patch can be put at the beginning of a patchfile.  Quilt is careful to preserve all text that precedes the actualpatch when doing a refresh.The series file is looked up in the root of the source tree, in thepatches directory, and in the \textsf{.pc} directory.  The first seriesfile that is found is used. This may also be a symbolic link, or a filewith multiple hard links.  Usually, only one series file is used for aset of patches, so the \textsf{patches} sub-directory is a convenient

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精一区二区三区| 夜夜嗨av一区二区三区网页| 久久 天天综合| 精品国产自在久精品国产| 国产一区不卡在线| 国产欧美一区二区精品忘忧草| 粉嫩蜜臀av国产精品网站| 中文字幕在线播放不卡一区| 91久久人澡人人添人人爽欧美| 亚洲自拍欧美精品| 欧美一级xxx| 国产一区二区在线观看免费 | 中文字幕一区在线观看视频| 99精品视频在线免费观看| 艳妇臀荡乳欲伦亚洲一区| 5566中文字幕一区二区电影 | 国产精品亚洲视频| 综合电影一区二区三区| 欧美福利一区二区| 国产麻豆精品一区二区| 亚洲精品五月天| 在线不卡的av| 国产成人av电影在线播放| 一区二区不卡在线播放| 中文字幕亚洲欧美在线不卡| 男女性色大片免费观看一区二区| 成人中文字幕在线| 国产精品18久久久久久久久| 亚洲欧洲av另类| 3d动漫精品啪啪| 成人免费毛片a| 午夜久久久久久久久久一区二区| 精品国产乱码久久久久久图片| 99久久国产综合精品色伊| 日韩激情av在线| 亚洲欧洲性图库| 精品国产精品网麻豆系列| 色视频一区二区| 国产综合色视频| 日本视频一区二区| 亚洲乱码国产乱码精品精可以看| 日韩欧美一二区| 欧美中文字幕不卡| 不卡视频免费播放| 久久爱另类一区二区小说| 亚洲精品视频在线观看免费| 国产无一区二区| 欧美一区二区私人影院日本| 91片在线免费观看| 国产精华液一区二区三区| 日本系列欧美系列| 亚洲一区二区三区四区中文字幕| 国产日韩三级在线| 久久综合给合久久狠狠狠97色69| 欧美性猛交一区二区三区精品 | 亚洲一卡二卡三卡四卡无卡久久| 久久精品亚洲一区二区三区浴池| 欧美色男人天堂| 91热门视频在线观看| 不卡的av电影| 国产a视频精品免费观看| 国产综合色精品一区二区三区| 石原莉奈在线亚洲三区| 亚洲综合久久久| 亚洲欧美一区二区三区极速播放 | 一区二区三区四区亚洲| 国产欧美日韩精品在线| 久久蜜桃香蕉精品一区二区三区| 精品日韩在线观看| 精品久久久三级丝袜| 日韩一级成人av| 91精品国产一区二区三区| 欧美日韩高清不卡| 欧美福利视频导航| 欧美一区二区三区婷婷月色| 欧美亚洲丝袜传媒另类| 欧美日韩在线直播| 欧美精选一区二区| 日韩一区二区精品葵司在线 | 成人在线一区二区三区| 国产精品一区二区黑丝| 国产91露脸合集magnet| 成人小视频免费在线观看| 国产69精品久久久久777| 成人国产精品免费观看动漫| 不卡高清视频专区| 日本高清不卡一区| 欧美日韩高清在线| 日韩欧美中文字幕公布| www久久久久| 国产精品女上位| 亚洲裸体xxx| 天天色天天操综合| 久久精品国产在热久久| 国产成人综合亚洲91猫咪| 不卡的av电影在线观看| 在线观看日韩高清av| 欧美精品久久久久久久久老牛影院| 欧美一级片在线| 久久精品一区二区三区四区| 亚洲国产精品精华液2区45| 亚洲日本乱码在线观看| 亚洲成人av中文| 久久99久久精品欧美| 成人动漫av在线| 欧美嫩在线观看| 久久综合久色欧美综合狠狠| 中文字幕一区二区三区不卡 | 欧美精品日日鲁夜夜添| 亚洲精品在线观看视频| 亚洲视频资源在线| 奇米影视在线99精品| 国产大片一区二区| 欧美视频中文字幕| 久久欧美中文字幕| 一区二区三区欧美视频| 久草这里只有精品视频| 91老师国产黑色丝袜在线| 日韩一区二区三区视频| 国产精品免费看片| 美女视频网站久久| 91碰在线视频| 久久这里只有精品6| 亚洲一二三四在线| 国产成人8x视频一区二区| 精品视频免费看| 国产精品麻豆视频| 久久国产福利国产秒拍| 日本精品免费观看高清观看| 久久免费电影网| 日韩成人一级片| 色综合一区二区三区| 久久久午夜电影| 日韩高清不卡一区二区| 色香色香欲天天天影视综合网| 欧美精品一区视频| 丝袜诱惑制服诱惑色一区在线观看| 国产成人福利片| 日韩免费高清av| 亚洲gay无套男同| 91免费小视频| 欧美经典三级视频一区二区三区| 日韩不卡一二三区| 在线免费视频一区二区| 国产精品高清亚洲| 国产成人综合自拍| 久久影音资源网| 久久不见久久见免费视频7| 欧美日韩国产综合视频在线观看| 亚洲视频香蕉人妖| 成人国产精品免费观看动漫| 久久精品夜色噜噜亚洲aⅴ| 麻豆成人免费电影| 91精品国产综合久久福利| 亚洲超碰精品一区二区| 在线看不卡av| 亚洲综合偷拍欧美一区色| 色婷婷av久久久久久久| 亚洲免费观看高清完整版在线| 成人av免费网站| 国产精品免费丝袜| 暴力调教一区二区三区| 国产精品色噜噜| 成人sese在线| 亚洲天堂a在线| 91麻豆福利精品推荐| 亚洲免费毛片网站| 色狠狠桃花综合| 亚洲午夜激情网页| 欧美日韩国产系列| 人人超碰91尤物精品国产| 91精品久久久久久蜜臀| 乱一区二区av| 久久这里只精品最新地址| 国产成人一级电影| 中文字幕在线一区| 一本色道久久综合狠狠躁的推荐| 亚洲人成在线观看一区二区| 色综合久久久久久久久| 亚洲综合一区二区精品导航| 欧美图片一区二区三区| 日本亚洲最大的色成网站www| 日韩视频在线观看一区二区| 韩国三级在线一区| 中文字幕第一区二区| 91九色最新地址| 日韩影院免费视频| 26uuu亚洲综合色| 不卡视频一二三四| 午夜久久久影院| 欧美成人福利视频| 成人性视频网站| 亚洲一区二区三区视频在线播放| 欧美日韩久久一区二区| 国模冰冰炮一区二区| 亚洲欧洲在线观看av| 91麻豆精品91久久久久久清纯| 国产精品99久久不卡二区| 亚洲欧洲综合另类在线| 日韩欧美亚洲另类制服综合在线|