利用HTP工具包开发报表

利用这种方式的优点是不需要跑请求就可以打印报表

工具包中常用程序说明

htp.print

语法   htp.print (cbuf | dbuf | nbuf);

作用   generates a line in an HTML document.

参数   cbuf in varchar2 or

dbuf in dateor

nbuf in number

Generates Generates a line in an HTML document based on the value passed to it.

htp.p

Alias for htp.print

Structure Tags 结构标记

The following tags are used to identify the major parts of an HTML

document.

Note: Although this section shows hypertext procedures (HTP), all of

them are also available as hypertext functions (HTF).

htp.htmlOpen

语法   htp.htmlOpen;

作用   Prints a tag that indicates the beginning of an HTML document

ERP REPORT

参数   none

Generates <HTML>

htp.htmlClose

语法   htp.htmlClose;

作用   Prints a tag that indicates the end of an HTML document

参数   none

Generates </HTML>

htp.headOpen

语法   htp.headOpen;

作用   Prints a tag that indicates the beginning of the HTML document head

参数   none

Generates <HEAD>

htp.headClose

语法   htp.headClose;

作用   Prints a tag that indicates the end of the HTML document head

参数   none

Generates </HEAD>

htp.bodyOpen

语法   htp.bodyOpen (cbackground, cattributes);

作用   Prints the tag that identifies the beginning of the body of an HTML document, and

allows you to specify an image as the background of the document

参数   cbackground in varchar2 DEFAULT NULL

cattributes in varchar2 DEFAULT NULL

Generates <BODY background="cbackground" cattributes>

Note: If cbackground and cattributes are NULL, this tag generates <BODY>.

ERP REPORT

Example htp.bodyOpen (‘/img/background.gif‘);  This line produces:<BODY

background="background.gif">

htp.bodyClose

语法   htp.bodyClose;

作用   Defines the end of the HTML document body

参数   none

Generates   </BODY>

Generates   <TITLE>ctitle</TITLE><Hnsize

ALIGN="calign" NOWRAP CLEAR="cclear"

cattributes>ctitle</Hnsize>

Note that htp.htitle produces non-standard

HTML. However, most Web Browsers accept

it. To produce standard HTML, the <TITLE>

tag must be in the HEAD section of the page,

and the level heading tag (<H

n>) must be in the BODY section. For example:

htp.headOpen; htp.title(...);

htp.headClose; htp.bodyOpen; htp.header

(1,...)); ...

Table Tags 表格标记

The Table tags allow the user to insert tables and manipulate the size

and columns of the table in a document.

Note: All the hypertext procedures (HTP) shown in this section are also

available as hypertext functions (HTF).

htp.tableOpen

语法    htp.tableOpen (cborder, calign, cnowrap, cclear, cattributes);

作用    Prints an HTML tag that begins an HTML table.

参数    cborder in varchar2 DEFAULT NULL

calign in varchar2 DEFAULT NULL

cnowrap in varchar2 DEFAULT NULL

cclear in varchar2 DEFAULT NULL

cattributes in varchar2 DEFAULT NULL;

Generates <TABLE BORDER NOWRAP ALIGN="calign" CLEAR="cclear" cattributes>

Note: The BORDER attribute is only determined by whether cborder is null

or not null.

ERP REPORT

htp.tableClose

语法    htp.tableClose;

作用    Prints an HTML tag that ends an HTML table.

参数    none

Generates </TABLE>

htp.tableRowOpen

语法    htp.tableRowOpen (calign, cvalign,cdp, cnowrap, cattributes);

作用    Prints an HTML tag that inserts a row tag into a table.

参数    calign in varchar2 DEFAULT NULL

cvalign in varchar2 DEFAULT NULL

cdp in varchar2 DEFAULT NULL

cnowrap in varchar2 DEFAULT NULL

cattributes in varchar2 DEFAULT NULL

Generates <TR ALIGN="calign" VALIGN="cvalign" DP="cdp" NOWRAP catttributes>

htp.tableRowClose

语法    htp.tableRowClose;

作用    Prints an HTML tag that ends a row in a table.

参数    none

Generates </TR>

htp.tableData

语法    htp.tableData (cvalue, calign, cdp, cnowrap, cattributes);

作用    Prints an HTML tag that inserts data into the rows and columns of a selected table.

参数    cvalue in varchar2 DEFAULT NULL

calign in varchar2 DEFAULT NULL

cdp in varchar2 DEFAULT NULL

cnowrap in varchar2 DEFAULT NULL

cattributes in varchar2 DEFAULT NULL

Generates <TD ALIGN="calign" DP="cdp" ROWSPAN="crowspan" COLSPAN="ccolspan" NOWRAP

ERP REPORT

cattributes>cvalue</TD>

包里面别的程序和用法可以查

http://www.lnu.edu.cn/book/oracleweb/ows402.htm

一个例子

<span style="font-size:18px;">PROCEDURE CUXTS001(
p_header_id IN VARCHAR2 default null,
p_org_id IN VARCHAR2 default null
)
AS
---declare the data source
------Report page parameters
v_row_num NUMBER;
v_first_flag NUMBER := 0; -----标志
x_count NUMBER; -------总行数
v_page_rows NUMBER := 1; ------定义每张报表的line数量
v_page_count NUMBER;
v_page_width NUMBER := 800;
v_font_size NUMBER := 2;
v_page_num NUMBER := 1;
v_line_count NUMBER := 0;
v_jes NUMBER := 0;
v_dis_no NUMBER := 0;
max_line NUMBER := 7;
----------------------------------------------------
t_qty NUMBER := 0;
t_amount NUMBER := 0;
x_org_name VARCHAR2 (100);
x_sum_count_no NUMBER := 0;
----采购题头
CURSOR c_header
IS
SELECT pha.segment1 po_num,
pha.po_header_id,
pha.type_lookup_code,
pha.agent_id,
pha.comments,
ppf.full_name full_name,
pha.creation_date,
ERP REPORT
pv.vendor_id,
SUBSTR (pv.vendor_name, 1, 38) vendor_name
FROM po_headers_all pha,
po_vendors pv,
per_people_f ppf
WHERE pha.vendor_id = pv.vendor_id
AND pha.agent_id = ppf.person_id
AND pha.org_id = TO_NUMBER (p_org_id)
AND pha.po_header_id = p_header_id;
----行信息
CURSOR c_line (x_header_id NUMBER)
IS
SELECT pda.destination_subinventory,
pll.quantity,
pla.line_num,
pla.unit_meas_lookup_code,
pla.unit_price,
pla.item_description item_desc,
pll.quantity * pla.unit_price amount,
pla.po_header_id,
pll.shipment_num,
msi.segment1 item,
pll.need_by_date need_by,
pll.ship_to_organization_id,
pll.promised_date,
pll.note_to_receiver,
ood.organization_code
FROM po_lines_all pla,
po_distributions_all pda,
po_line_locations_all pll,
mtl_system_items_b msi,
financials_system_params_all fsp,
org_organization_definitions ood
WHERE pla.po_line_id = pda.po_line_id
AND pll.line_location_id = pda.line_location_id
AND (pll.closed_code = 'OPEN' OR pll.closed_code IS NULL)
AND pla.item_id = msi.inventory_item_id(+)
AND pla.po_header_id = x_header_id
AND NVL (msi.organization_id, fsp.inventory_organization_id) =
fsp.inventory_organization_id
ERP REPORT
AND fsp.org_id = p_org_id
AND pll.ship_to_organization_id = ood.organization_id(+)
;
BEGIN
fnd_client_info.set_org_context(p_org_id);
HTP.htmlopen;
HTP.p ('<head>');
HTP.p ('<STYLE>');
HTP.p (' P { page-break-before: always }');
HTP.p ('</STYLE>');
HTP.p ('</head>');
HTP.bodyopen;
FOR lc_h IN c_header
LOOP
---title2
HTP.tableopen (
cattributes=> 'cellspacing=0 cellpadding=15 border=0 width='
|| v_page_width
|| ' bgcolor="#000000"'
);
HTP.tablerowopen (cattributes => 'bgcolor="#ffffff"');
HTP.tabledata (
cvalue=> '<font size="'
|| 3
|| '"> <b><U>采  购  单  据</b></U>',
cattributes=> 'width="16%"',
calign=> 'center'
);
HTP.tablerowclose;
HTP.tableclose;
---header
HTP.tableopen (
cattributes=> 'cellspacing=0 cellpadding=4 border=0 width='
|| v_page_width
|| ' bgcolor="#000000"'
);
HTP.tablerowopen (cattributes => 'bgcolor="#ffffff" height="8"');
ERP REPORT
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '">  采购单号:'
|| lc_h.po_num,
cattributes=> 'width="15%"',
calign=> 'left'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '">  采购类型:'
|| lc_h.type_lookup_code,
cattributes=> 'width="20%"',
calign=> 'left'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '">  采购日期:'
|| TO_CHAR (lc_h.creation_date, 'YYYY/MM/DD'),
cattributes=> 'width="20%"',
calign=> 'left'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '">采购员:'
|| lc_h.full_name,
cattributes=> 'width="15%"',
calign=> 'left'
);
HTP.tablerowclose;
HTP.tableclose;
HTP.tableopen (
cattributes=> 'cellspacing=0 cellpadding=4 border=0 width='
|| v_page_width
|| ' bgcolor="#000000"'
);
HTP.tablerowopen (cattributes => 'bgcolor="#ffffff"');
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '">供应商:'
ERP REPORT
|| lc_h.vendor_name,
cattributes=> 'width="20%"',
calign=> 'left'
);
HTP.tablerowclose;
HTP.tableclose;
HTP.tableopen (
cattributes=> 'cellspacing=0 cellpadding=2 border=0 width='
|| v_page_width
|| ' bgcolor="#000000"'
);
HTP.tablerowopen (cattributes => 'bgcolor="#ffffff"');
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '">备注:'
|| lc_h.comments,
cattributes=> 'width="20%"',
calign=> 'left'
);
HTP.tablerowclose;
HTP.tableclose;
-- line
BEGIN
HTP.tableopen (
cattributes=>  'border="1" borderColorDark="#FFFFFF"
borderColorLight="#000000" cellPadding="0" cellSpacing="0" width='
|| v_page_width
|| ' '
);
HTP.tablerowopen (cattributes => 'bgcolor="#ffffff"');
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"><b>  项目</b></font>',
calign=> 'center',
cattributes=> 'width=18%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"><b>  货物名称</b></font>',
ERP REPORT
calign=> 'center',
cattributes=> 'width=22%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"><b>  单位</b></font>',
calign=> 'center',
cattributes=> 'width=6%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"><b>  采购单价</b></font>',
calign=> 'center',
cattributes=> 'width=8%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"><b>  数量</b></font>',
calign=> 'center',
cattributes=> 'width=7%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"><b>  金额</b></font>',
calign=> 'center',
cattributes=> 'width=13%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"><b>  需要日期</b></font>',
calign=> 'center',
cattributes=> 'width=10%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"><b>  仓库</b></font>',
calign=> 'center',
cattributes=> 'width=8%'
ERP REPORT
);
HTP.tablerowclose;
SELECT COUNT (pla.po_line_id)
INTO v_jes
FROM po_lines_all pla,
po_distributions_all pda,
po_line_locations_all pll,
mtl_system_items_b msi,
financials_system_params_all fsp,
org_organization_definitions ood
WHERE pla.po_line_id = pda.po_line_id
AND pll.line_location_id = pda.line_location_id
AND (pll.closed_code = 'OPEN' OR pll.closed_code IS NULL)
AND pla.item_id = msi.inventory_item_id(+)
AND pla.po_header_id = lc_h.po_header_id
AND NVL (msi.organization_id, fsp.inventory_organization_id) =
fsp.inventory_organization_id
AND fsp.org_id = p_org_id
AND pll.ship_to_organization_id = ood.organization_id(+);
FOR lc_l IN c_line (lc_h.po_header_id)
LOOP
HTP.tablerowopen (cattributes => 'bgcolor="#ffffff"');
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> '
|| '&'
|| 'nbsp'
|| lc_l.item,
calign=> 'left',
cattributes=> 'width=16%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> '
|| '&'
|| 'nbsp'
|| lc_l.item_desc,
calign=> 'left',
cattributes=> 'width=22%'
ERP REPORT
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> '
|| '&'
|| 'nbsp'
|| lc_l.unit_meas_lookup_code,
calign=> 'left',
cattributes=> 'width=6%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> '
|| '&'
|| 'nbsp'
|| lc_l.unit_price,
calign=> 'right',
cattributes=> 'width=12%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> '
|| '&'
|| 'nbsp'
|| lc_l.quantity,
calign=> 'right',
cattributes=> 'width=7%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> '
|| '&'
|| 'nbsp'
|| lc_l.amount,
calign=> 'right',
cattributes=> 'width=13%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
ERP REPORT
|| '"> '
|| '&'
|| 'nbsp'
|| TO_CHAR (lc_l.PROMISED_DATE, 'YYYY/MM/DD'),
calign=> 'center',
cattributes=> 'width=10%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> '
|| '&'
|| 'nbsp'
|| lc_l.organization_code,
calign=> 'center',
cattributes=> 'width=6%'
);
t_qty := t_qty
+ lc_l.quantity;
t_amount := t_amount
+ lc_l.amount;
END LOOP;
v_jes := max_line
- v_jes;
LOOP
EXIT WHEN v_jes <= 0;
HTP.tablerowopen (cattributes => 'bgcolor="#ffffff"');
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
|| '&'
|| 'nbsp'|| ' ' ,
calign=> 'center',
cattributes=> 'width=18%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
|| '&'
ERP REPORT
|| 'nbsp' || ' ',
calign=> 'center',
cattributes=> 'width=22%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
|| '&'
|| 'nbsp' || ' ',
calign=> 'center',
cattributes=> 'width=6%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
|| '&'
|| 'nbsp' || ' ',
calign=> 'center',
cattributes=> 'width=8%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
|| '&'
|| 'nbsp' || ' ',
calign=> 'center',
cattributes=> 'width=7%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
|| '&'
|| 'nbsp' || ' ',
calign=> 'center',
cattributes=> 'width=13%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
ERP REPORT
|| '&'
|| 'nbsp' || ' ',
calign=> 'center',
cattributes=> 'width=10%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
|| '&'
|| 'nbsp' || ' ',
calign=> 'center',
cattributes=> 'width=8%'
);
v_jes := v_jes
- 1;
END LOOP;
--sum
HTP.tablerowopen (cattributes => 'bgcolor="#ffffff"');
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
|| '合计',
calign=> 'center',
cattributes=> 'width=18%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
|| '&'
|| 'nbsp' || ' ',
calign=> 'center',
cattributes=> 'width=22%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
|| '&'
|| 'nbsp' || ' ',
calign=> 'center',
ERP REPORT
cattributes=> 'width=6%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> <b>'
|| '&'
|| 'nbsp',
calign=> 'center',
cattributes=> 'width=8%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> '
|| '&'
|| 'nbsp'
|| t_qty,
calign=> 'right',
cattributes=> 'width=7%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> '
|| '&'
|| 'nbsp' || ' '
|| t_amount,
calign=> 'right',
cattributes=> 'width=13%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> '
|| '&'
|| 'nbsp' || ' ',
calign=> 'right',
cattributes=> 'width=10%'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '"> '
ERP REPORT
|| '&'
|| 'nbsp' || ' ',
calign=> 'right',
cattributes=> 'width=8%'
);
HTP.tablerowclose;
HTP.tableclose;
END;
HTP.tableopen (
cattributes=> 'cellspacing=0 cellpadding=8 border=0 width='
|| v_page_width
|| ' bgcolor="#000000"'
);
HTP.tablerowopen (cattributes => 'bgcolor="#ffffff"');
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '">  打印人:',
cattributes=> 'width="10%"',
calign=> 'left'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '">部门主管:',
cattributes=> 'width="10%"',
calign=> 'left'
);
HTP.tabledata (
cvalue=> '<font size="'
|| v_font_size
|| '">总经理:',
cattributes=> 'width="10%"',
calign=> 'left'
);
HTP.tablerowclose;
HTP.tableclose;
END LOOP;
HTP.tableclose;
HTP.bodyclose;
HTP.htmlclose;
END; </span>

开发好后注册程序:

路径:系统管理员->安全性->WEB PL/SQL

然后在需要的地方调用就可以直接打印出报表

DECLARE
v_command VARCHAR2 (200);
v_org_id NUMBER := fnd_profile.VALUE ('ORG_ID');
BEGIN
v_command := fnd_profile.VALUE ('APPS_WEB_AGENT');
v_command := v_command || '/CUXTS001?p_header_id=' || :submit.header_id;
v_command := v_command || '&p_org_id=' || TO_CHAR (v_org_id);
web.show_document (v_command, '_blank');
END; 

利用HTP工具包开发报表

时间: 2024-10-25 17:13:36

利用HTP工具包开发报表的相关文章

利用 PlxSdk 工具包开发 Linux 下 PCI 设备驱动

最近实验室需要做一个 Linux 与 FPGA 之间的快速接口,考虑高速的特性,选择了 PCI 接口实现. FPGA 选择 altera 的 EP2C20F484C8 PCI 接口芯片选择 PLX8311 操作系统选择 ubuntu10.04 1.Linux 检测 PCI 将板卡插入到主机 PCI 插槽内,开机,通过 lspci 命令可以检测到当前系统下所有的 PCI 设备. 02:00.0 PCI bridge: PLX Technology, Inc. PEX 8111 PCI Expres

四、利用EnterpriseFrameWork快速开发基于WCF为中间件的三层结构系统

回<[开源]EnterpriseFrameWork框架系列文章索引> 本章内容与上一张<利用EnterpriseFrameWork快速开发Winform系统(C/S)>关系紧密,WCF模式只是在Winform模式中的界面层和逻辑层之间加入了WCF中间件用来实现双方的通讯,说得更简单一点就是把Winform模式中的winController控制器给拆分为wcfController与wcfclientControlle两个控制器并用WCF实现两个控制器之间的通讯,双方数据传递与Web模

利用Docker构建开发环境

最近接触PAAS相关的知识,在研发过程中开始使用Docker搭建了自己完整的开发环境,感觉生活在PAAS时代的程序员真是幸福,本文会简要介绍下Docker是什么,如何利用Docker来搭建自己的开发环境(本文主要是面向Mac OS X),以及期间所遇到的一些坑和解决方案.(本文会要求你对PAAS.LXC.CGroup.AUFS有一定的了解基础,请自行Google ) 大背景–虚拟化技术历史 计算机虚拟化技术由来已久,从硬件仿真到全虚拟化,再到准虚拟化和操作系统虚拟化,各种技术粉墨登场,种类繁多,

利用Google Chrome开发插件,在网页中植入js代码

Google Chrome是一个很强大的浏览器,提供了各种各样的插件,大大提升了使用了的效率,比如vimium.honx等. Google在提供这些插件的同时还允许用户开发自己的插件. 最近在写js的脚本采集程序,需要测试在网页中的运行情况,因此可以利用Chrome插件进行测试. 1.首先第一步是新建一个文件夹,并新建一个manifest.json文件,内容如下 { "manifest_version": 2, "name": "Js implants&q

java JFreechart开发报表的实例demo下载

原文:java JFreechart开发报表的实例demo下载 源代码下载地址:http://www.zuidaima.com/share/1550463472110592.htm 运行效果图如下: 代码截图:

【DSP开发】利用CCS5.4开发基于DSP6455的JPEG2000图像解压缩过程

[DSP开发]利用CCS5.4开发基于DSP6455的JPEG2000图像解压缩过程 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 说明:前端是时间基于VS2010工程,在windows上实现了对openjpeg2000的改写,实现了从内存中读取数据进行解压缩的工作.由于某些技术储备需要,将其移植到DSP6455中进行解压缩.本文记录的就是整个移植过程. 0. 异想天开:试图在CCS上直接使用VS2010生成好的编译库 这个想法是一直就有的,在调试VS

[转]利用Docker构建开发环境

利用Docker构建开发环境 Posted by makewonder on 2014 年 4 月 2 日 最近接触PAAS相关的知识,在研发过程中开始使用Docker搭建了自己完整的开发环境,感觉生活在PAAS时代的程序员真是幸福,本文会简要介绍下Docker是什么,如何利用Docker来搭建自己的开发环境(本文主要是面向Mac OS X),以及期间所遇到的一些坑和解决方案.(本文会要求你对PAAS.LXC.CGroup.AUFS有一定的了解基础,请自行Google ) 大背景–虚拟化技术历史

发布一快速开发报表的类库,让报表的开发具有前所未有的方便和快速

原文:发布一快速开发报表的类库,让报表的开发具有前所未有的方便和快速 因大量博友的索要,现与朋友合作封装了使用前文介绍的动态设置DevExpress Report的组件,这篇文章用来介绍这个ReportCommon自绘报表组件并一些截图,如果需要请进行购买,邮件中写上您的邮箱. 声明:本类库使用DevExpress控件,但不包含DevExpress控件,因此使用者需要另行购买DevExpress控件,如果使用者因盗版DevExpress控件引起的一切法律纠纷,由使用者自行承担,本人及相关开发人员

Git 分支-利用分支进行开发的工作流程

3.4 Git 分支 - 利用分支进行开发的工作流程 利用分支进行开发的工作流程 现在我们已经学会了新建分支和合并分支,可以(或应该)用它来做点什么呢?在本节,我们会介绍一些利用分支进行开发的工作流程.而正是由于分支管理的便捷,才衍生出了这类典型的工作模式,你可以根据项目的实际情况选择一种用用看. 长期分支 由于 Git 使用简单的三方合并,所以就算在较长一段时间内,反复多次把某个分支合并到另一分支,也不是什么难事.也就是说,你可以同时拥有多个开放的分支,每个分支用于完成特定的任务,随着开发的推