StarTeam is a version control system used in software development, especially when a project involves multiple teams in different locations. StarTeam is an SCM and SDLC software application, created by Starbase Corporation, which was acquired by Borland in January 2003 which was acquired by Micro Focus in July 2009 and later acquired by OpenText in 2023. The application is client-server, backed by a relational database that retains all changes made to a project during its evolution as well as the project requirements, task assignments, threaded discussions and bug tracking. Microsoft SQL Server and Oracle database are supported database servers.
28-665: StarTeam supports branching and three-way merging , difference analysis, advanced user access and security management, checkpoints, end user and administrator auditing, view and revision labels, promotion states and customization features. The server supports remote use and strong encryption for remote connections. StarTeam allows "live" backups while the server is in active use and includes an optional publish/subscribe event system called StarTeam MPX to enhance scalability. In addition to file versioning, StarTeam also stores requirements, project tasks, change requests, and discussions. All of these can be interlinked to enhance traceability within
56-454: A common preceding version. This enables users to merge the sets of changes represented by the two newer files. This can be enabled using a command like this: diff3 mine older yours . This is like subtracting the file older from the file yours and adding the result to the file mine , or as merging into mine the changes that would turn older into yours . This merging is well-defined as long as mine and older match in
84-430: A configuration file and a user wants to have the good stuff in both, this can usually be achieved by merging the configuration files by hand, and picking the wanted changes from both sources (this is also called two-way merging). Manual merging is also required when automatic merging runs into a change conflict; for instance, very few automatic merge tools can merge two changes to the same line of code (say, one that changes
112-402: A function name, and another that adds a comment). In these cases, revision control systems resort to the user to specify the intended merge result. There are many different approaches to automatic merging, with subtle differences. The more notable merge algorithms include three-way merge, recursive three-way merge, fuzzy patch application, weave merge, and patch commutation. A three-way merge
140-470: A generic name for the three-way-merge algorithm, specifically one based on reconciling two different diffs stemming from the first source. When two people have made changes to copies of the same file, diff3 can produce a merged output that contains both sets of changes together with warnings about conflicts. diff3 can merge three or more sets of changes to a file by merging two change sets at a time. diff3 can incorporate changes from two modified versions into
168-417: A linear history. In effect, when two patches are made in the context of a common situation, upon merging, one of them is rewritten so that it appears to be done in the context of the other. Patch commutation requires that the exact changes that made derivative files are stored or can be reconstructed. From these exact changes it is possible to compute how one of them should be changed in order to rebase it on
196-547: A logical sense). Also, other pieces of software deploy automatic merging if they allow for editing the same content simultaneously. For instance, Misplaced Pages allows two people to edit the same article at the same time; when the latter contributor saves, their changes are merged into the article instead of overwriting the previous set of changes. Manual merging is what people have to resort to (possibly assisted by merging tools) when they have to reconcile files that differ. For instance, if two systems have slightly differing versions of
224-839: A project. StarTeam includes a number of clients, including a web client, a cross-platform Java client, a command line interface and integrations for popular Integrated development environments such as Borland Delphi , Borland JBuilder and Eclipse . StarTeam includes several APIs for platforms including COM , Java , and the Microsoft .NET Framework . It also provides an MSSCCI compliant Source Control Plug-in API for integration with IDEs that offer integrated revision control features as well as other applications such as Mercury Interactive 's TestDirector and IBM Rational DOORS . All check-ins in StarTeam are atomic . Whenever more than one file
252-560: A total ordering for all lines, then the lines that do not have an ordering with respect to each other are additions that conflict. Weave merge was apparently used by the commercial revision control tool BitKeeper and can handle some of the problem cases where a three-way merge produces wrong or bad results. It is also one of the merge options of the GNU Bazaar revision control tool, and is used in Codeville. Diff3 diff3
280-557: Is a Unix utility to compare three files and show any differences among them. diff3 can also merge files, implementing a three-way merge . diff3 originally appeared in Version 7 Unix of 1979. A very similar version was found in Berkeley Software Distribution (BSD) and was inherited into OpenBSD and probably Solaris . On most modern Unix-like systems, even BSD-derived ones like FreeBSD and NetBSD,
308-480: Is a file that contains a description of changes to a file. In the Unix world, there has been a tradition to disseminate changes to text files as patches in the format that is produced by " diff -u". This format can then be used by the patch program to re-apply (or remove) the changes into (or from) a text file, or a directory structure containing text files. However, the patch program also has some facilities to apply
SECTION 10
#1732802250764336-485: Is a relatively untrustworthy method, sometimes misapplying patches that have too little context (especially ones that create a new file), sometimes refusing to apply deletions that both derivatives have done. Patch commutation is used in Darcs to merge changes, and is also implemented in git (but called "rebasing"). Patch commutation merge means changing the order of patches (i.e. descriptions of changes) so that they form
364-426: Is checked in as the result of a single transaction all of the files, and their associated process items, are updated in a single action. If for some reason, the check-in fails, none of the files are checked in, and the status of the associated process items is not updated. For example, suppose User A selects to check in all modified files in a StarTeam folder, but one of the selected files is locked by User B. Because of
392-649: Is necessary when a file is modified on two independent branches and subsequently merged. The result is a single collection of files that contains both sets of changes. In some cases, the merge can be performed automatically, because there is sufficient history information to reconstruct the changes, and the changes do not conflict . In other cases, a person must decide exactly what the resulting files should contain. Many revision control software tools include merge capabilities. There are two types of merges: unstructured and structured. Unstructured merge operates on raw text, typically using lines of text as atomic units. This
420-441: Is performed after an automated difference analysis between a file "A" and a file "B" while also considering the origin, or common ancestor, of both files "C". It is a rough merging method, but widely applicable since it only requires one common ancestor to reconstruct the changes that are to be merged. Three way merge can be done on raw text (sequence of lines) or on structured trees. The three-way merge looks for sections which are
448-429: Is what Unix tools (diff/patch) and CVS tools (SVN, Git) use. This is limited , as a line of text does not represent the structure of source code. Structured merge tools, or AST merge, turn the source code into a fully resolved AST . This allows for a fine-grained merge that avoid spurious conflicts. Automatic merging is what version control software does when it reconciles changes that have happened simultaneously (in
476-480: The "patchutils" package implements patch commutation for traditional patches produced by diff -u. Weave merge is an algorithm that does not make use of a common ancestor for two files. Instead, it tracks how single lines are added and deleted in derivative versions of files, and produces the merged file on this information. For each line in the derivative files, weave merge collects the following information: which lines precede it, which follow it, and whether it
504-510: The diff3 provided is GNU 's version in diffutils (formerly GNU Tools ). This version has the ability to merge files on its own without relying on ed . It internally invokes diff to do the comparison, but can use any other compatible tool too. The command is available as a separate package for Microsoft Windows as part of the UnxUtils collection of native Win32 ports of common GNU Unix-like utilities. "Diff3" has also become
532-431: The locked file, none of the files are checked in (and none of the process items are updated as fixed) and User A is notified that none of the files were checked in because one of the files was locked by User B. Merge (revision control) In version control , merging (also called integration) is a fundamental operation that reconciles multiple changes made to a version-controlled collection of files. Most often, it
560-457: The neighborhood of each such change. This fails to be true when all three input files differ or when only older differs; this is a conflict. When all three input files differ, the conflict is an overlap. diff3 has several methods to handle overlaps and conflicts. It can omit overlaps or conflicts, or select only overlaps, or mark conflicts with special <<<<<<< and >>>>>>> lines. diff3 can output
588-473: The non-unique ancestors first. This merge can itself suffer the same problem, so the algorithm recursively merges them. Since there is a finite number of versions in the history, the process is guaranteed to eventually terminate. This technique is used by the Git revision control tool. (Git's recursive merge implementation also handles other awkward cases, like a file being modified in one version and renamed in
SECTION 20
#1732802250764616-439: The other, but those are extensions to its three-way merge implementation; not part of the technique for finding three versions to merge.) Recursive three-way merge can only be used in situations where the tool has knowledge about the total ancestry directed acyclic graph (DAG) of the derivatives to be merged. Consequently, it cannot be used in situations where derivatives or merges do not fully specify their parent(s). A patch
644-658: The other. For instance, if patch A adds line "X" after line 7 of file F and patch B adds line "Y" after line 310 of file F, B has to be rewritten if it is rebased on A: the line must be added on line 311 of file F, because the line added in A offsets the line numbers by one. Patch commutation has been studied a great deal formally, but the algorithms for dealing with merge conflicts in patch commutation still remain open research questions. However, patch commutation can be proven to produce "correct" merge results where other merge strategies are mostly heuristics that try to produce what users want to see. The Unix program flipdiff from
672-452: The patch into a file that is not exactly similar as the origin file that was used to produce the patch. This process is called fuzzy patch application , and results in a kind of asymmetric three-way merge, where the changes in the patch are discarded if the patch program cannot find a place in which to apply them. Like CVS started as a set of scripts on diff3 , GNU arch started as a set of scripts on patch. However, fuzzy patch application
700-420: The same in only two of the three files. In this case, there are two versions of the section, and the version which is in the common ancestor "C" is discarded, while the version that differs is preserved in the output. If "A" and "B" agree, that is what appears in the output. A section that is the same in "A" and "C" outputs the changed version in "B", and likewise a section that is the same in "B" and "C" outputs
728-411: The technique fundamentally depends on finding a common ancestor of the versions to be merged. There are awkward cases, particularly the "criss-cross merge", where a unique last common ancestor of the modified versions does not exist. Fortunately, in this case it can be shown that there are at most two possible candidate ancestors, and recursive three-way merge constructs a virtual ancestor by merging
756-565: The version in "A". Sections that are different in all three files are marked as a conflict situation and left for the user to resolve. Three-way merging is implemented by the ubiquitous diff3 program, and was the central innovation that allowed the switch from file-locking based revision control systems to merge-based revision control systems. It is extensively used by the Concurrent Versions System (CVS). Three-way merge based revision control tools are widespread, but
784-450: Was deleted at some stage of either derivative's history. If either derivative has had the line deleted at some point, it must not be present in the merged version. For other lines, they must be present in the merged version. The lines are sorted into an order where each line is after all lines that have preceded it at some point in history, and before all lines that have followed it at some point in history. If these constraints do not give
#763236