Development model described in this article about a year ago already in my introduction of private projects and work, and has proven to be very successful. Nike Air Max 2015 Men I wanted to write something about this model has been good for some time, but has been suffering from lack of time, but now I can. I do not want to discuss any details of the project, only discuss the branching strategy and release management. This article revolves around Git 2015 Nike Free 5.0 as all of our source code version control tools and expanded. Why are the pros and cons git Git order to thoroughly investigate and centralized source version control system, see these articles. In this respect there is much heated debate. As a developer, compared to other tools, the current I prefer Git. Git really changed the developer on the merger with the branch of thinking. In the world of those classic CVS / Subversion management tool, merge / branch is considered to be somewhat scary ('Beware merge conflicts, they bite you!'), But occasionally you have to do to operate to solve some problems. But using Git, these actions have become extremely simple, these operations are considered one of the core part of your daily workflow. For example, in the CVS / Subversion book, branching and merging in a chapter was only after the first discussion (for advanced users). However, in each of the Git book, in the third chapter we talked about the (basic part). Because of its simplicity and reproducibility command, branching and merging is no longer frightening. Version control tools are considered to provide operating convenience more than anything else on the tool itself, enough already discussed in the branch / merge regard, the following model for developers to expand. I would like to introduce this model is not content than any set of processes, each team member must comply with, it is easy to manage the software development process. We use both decentralized and centralized, and this branching model with a very good library, he had a 'real' central warehouse. Note that this library is considered to be the central repository (since Git is a distributed version control tools, at the technical level there is no so-called central warehouse). We will be named for the origin of this warehouse, because all Git users are more familiar with this name. Each developer pull and push the code from the origin. In addition to a centralized push pull relationship, each developer is also possible from other developers pull at the code, to form their own team. For example, when two or more people and the development of a large property, or when pushed to the code before the origin, such code management may be useful. In the figure, the presence of Mens Nike Free 3.0 V2 Shoes White Black Red Alice and Bob, Alice and David, Clair Air Max 2011 Womens Blue and David three sub-teams Technically, this simply means that Alice defines a remote Git repository, named bob, pointing to Bob's actually a repository and vice versa (Bob defines a remote Git repository, named alice, actually points to Alice's repository). Main branch Honestly, we are discussing the development of the model by the model currently exists a great inspiration. Centralized repository has two permanent main branch: master branch develop the master branch each branch origin Git users are familiar with. Another parallel branch named develop branch. We believe that the origin / master branch HEAD reference points of this code is to publish. We believe that the origin / develop this branch HEAD pointed reference code always reflects the latest code changes to the next version to be delivered properties. Some people call it the 'integration branch.' It is also the automatic build system build commands executed branch. When the code develop branch reaches a stable state, and ready for release, all the code changes should be merged into the master branch, and then marked with the release number of the tag. Specifically how to do this, we will discuss new publishing products and therefore, every time the code is merged into the master branch, it is a man-made definition. In theory, in which we should be very strict master branch when there is a new submission, we should use Git hook script executes automatically build command, and then push the software to the production environment servers for distribution. Auxiliary branch adjacent to master and develop branches, our development model adopted another auxiliary branch to help parallel development between team members, a simple tracking features, publish Begin packages, and quickly solve the problem online ʱ?? Unlike the main branch, these auxiliary branch often limited as long as the life cycle, because they will eventually be removed. We use different types of branches include: feature branch Release branch Hotfix branches Each branch has its own special purpose described above, but also bound to strict rules: Which branch is pull their branches, which branches are their goals merge branches ʱ?? From a technical point of view, the special Air Jordan Outlet nature of these branches no more meaning. Just follow our usage of these branches were classified. They still look like the original Git branch. Characteristic feature branch can pull branch from develop to establish a branch, the branch must Nike Free Womens eventually merge will develop. Feature branch named, in addition to master, develop, release- *, or outside hotfix- *, you can easily named. Characteristics of the branch (sometimes branch into the topic) for the development of a future version of the new features. When starting a new feature of the development, this feature will be released in the next version which target, at the moment we do not know of. Characteristics of the branch is the essence so long as properties under development, he should exist, but in the end these features will be merged into the develop branch branch (to add new features in the new version) or discarded (it's just a disappointment Test) feature branch there is only a local developer repository, not in the remote repository. Create a feature branch When starting to develop a new feature to create properties from develop branch branch $ git checkout -b myfeature developSwitched to a new branch \u0026 quot; myfeature \u0026 quot; in the develop 535807 103 Jordan CP3.VI White Black Game Royal Sport Red CP3 Shoes 2013 Sale branch integration has been developed features developed properties must be merged to develop branch, is added to the upcoming version. $ Git checkout developSwitched to branch 'develop' $ git merge --no-ff myfeatureUpdating ea1b82a..05e9557 (Summary of changes) $ git branch -d myfeatureDeleted branch myfeature (was 05e9557) $ git push origin develop -. No-ff The combined effect parameter is at the time, it creates a new commit object, even a fast-forward mode combination. This avoids the loss characteristics of the branch history information and the submission of the record information. Compare the example of the right, it is impossible to see from the Git history has achieved a characteristic Nike Air Max 95 of all commit objects - unless you go to see all the logs. To get the entire feature branch information, in the example of the right in question is indeed a headache, but if you use --no-ff parameters do not have this problem. After using this parameter, indeed we created some new commit object (even if it is empty submit object), but it is worth it. Unfortunately, I have not found a way to make Git default merge operations with --no-ff parameters, but really should be. Release branch from develop branch to establish a branch Release, Release branch must merge to develop the branch and master branch, Release branch name can be named: release- *. Release branch used to support a new release. They allow at the last moment to make some minor adjustment. Even allowing some minor bug changes for prospective new release to some metadata (version number, the build time, etc.). By completing these jobs release branch, develop branch will merge these properties to prepare for the next big release. Pull from branches develop new release branch point in time is when the development work has reached a new version of expectations. At least at this point in time, all ready to release Nike Air Zoom Flight The Glove the next version of the target characteristic must have been merged into the develop branch. Target characteristic version is not necessarily merger would further develop branch. These characteristics must wait until after the branch create personality to be merged back into develop branch after release branch is created, you will get to a good distribution of the upcoming release of version number, not earlier, at this point in time. Prior to this, develop a branch of the next version of the code reflects the code changes, but in the end the next version is 0.3 or 1.0, it is not very clear, until after the release branch is established all determined. The decision to start building the release branch, will make the Nike Air Max project version rule out other projects. Create a release branch from develop to create a release branch branch. For example, version 1.1.5 is the current release version of the Air Max 2011 Men Blue Black product, we are about to release a larger version. develop branch now has to prepare for the next version Well, we decided the next version number is 1.2 (1.1.6 or 2.0 may be). So we create a release branch, and to give new branch version number: $ git checkout -b release-1.2 developSwitched to a new branch \u0026 quot; release-1.2 \u0026 quot; $ ./bump-version.sh 1.2Files modified successfully, version bumped . to 1.2 $ git commit -a -m \u0026 quot; Bumped version number to 1.2 \u0026 quot; [release-1.2 74d9424] Bumped version number to 1.21 Mens Nike Free 3.0 Wool Skin Shoes Blue files changed, 1 insertions (+), 1 deletions (-) created a branch and cut to After this branch, we marked the version number to the branch. bump-version.sh is a fictional shell script that changes some files workspace to reflect the new version features. (Of course, you can manually change these files), then release it was submitted. The new branch will be in existence for some time, until the final release of the new version. During this time, bug solution can be (not to develop branches) in this branch. At this point it is strictly prohibited to add new major features. These changes must be merged back into develop the branch, then you wait for a new release. At the end of a release branch when release branch ready to become a real release version, you need to perform some operations must. First, the release branch is merged back into master branch (because the master branch every submission is predefined a new version, remember). Then submitted for this fight tag, for the future to view the version history. Finally, the changes made in the release branch is also incorporated to develop the branch, in this case, the future of the other editions will contain these have been resolved a bug. In Git requires two steps:. $ Git checkout masterSwitched to branch 'master' $ git merge --no-ff release-1.2Merge made by recursive (Summary of changes) $ git tag -a 1.2 release branch such work has been completed , tag has also been hit. Note: You can use -s or -u \u0026 lt; key \u0026 gt; tag to set parameters for your signature label. To save the changes made in the release of these branches, we need to develop these changes merged back into the branch. Git execute the following command: $ git checkout developSwitched to branch 'develop' $ git merge --no-ff release-1.2Merge made by recursive (Summary of changes) This step is likely to be merged conflict (most likely because of us. It has changed the version number). If there is a conflict, to get rid of him, then commit. Now that we have completed the work, release branch can be deleted, because we do not need him: $ git branch -d release-1.2Deleted branch release-1.2 (was ff452fe) .Hotfix branch Hotfix branches from the master branch establishment must be merged back into develop branch and master branch, the branch can be named for the Hotfix: hotfix- * Hotfix branch in a way very much like release branches, they are meant to prepare a new version is released, and are unknowable in advance. Hotfix branch is a bug in the production environment based on current products need to be resolved and must be created. When a version of the product has a serious bug needs an immediate solution, Hotfix branch needs to be established from the master branch that corresponds to the version tag, because the tag labeled product versions to create a hotfix branch Hotfix branches are created from the master branch. Such as the current 1.2 version of the product line because of a Bug server-side cause system problems. However, changes in the develop branch is not reliable, so we need to establish hotfix branch, and then begin to solve the problem: $ git checkout -b hotfix-1.2.1 masterSwitched to a new branch \u0026 quot; hotfix-1.2.1 \u0026 quot; $ ./ bump-version.sh 1.2.1Files modified successfully, version bumped to 1.2.1 $ git commit -a -m \u0026 quot;. Bumped version number to 1.2.1 \u0026 quot; [hotfix-1.2.1 41e61bb] Bumped version number to 1.2.11 files changed, 1 insertions (+), 1 deletions (-) Do not forget that after you create a branch revision number. Then get rid of bug, submit one or more times. $ Git commit -m \u0026 quot; Fixed severe production problem \u0026 quot; [hotfix-1.2.1 abbe5d6] Fixed severe production problem5 files changed, 32 insertions (+), 17 deletions 2015 Nike KD 7 Kids Basketball Shoes Sport Turq Charcoal Atomic Green Outlet (-) after the hotfix branch to complete the work, to get rid of a bug in the code need to merge the branch back to master, but also need to merge to develop the branch, the purpose is to ensure that in the next version of the bug have been resolved. This is much like release branches ah. First, the master branch merged update, and then hit tag $ git checkout masterSwitched to branch 'master' $ git merge --no-ff hotfix-1.2.1Merge made by recursive. (Summary of changes) $ git tag -a 1.2. 1 Note: You can use the -s or -u \u0026 lt; key \u0026 gt; tag to set parameters for your Air Max 2011 Womens Blue Black signature label. Then, the code in the develop branch merging bugfix $ git checkout developSwitched to branch 'develop' $ git merge --no-ff hotfix-1.2.1Merge made by recursive. (Summary of changes) there may be some unusual circumstances, when a When the release branch Nike Air Max 95 Men presence, hotfix release branch need to be merged into the branch, rather than develop branch. When the mission is completed after release branch, merged back into the code bugfix release branch will eventually be merged into the develop branch. (When the urgent need to develop the branch address these bug, and not wait until the end of the release branch, you can secure these bugfix code into the develop branch, this is also possible). Finally delete these temporary branch $ git branch -d hotfix-1.2.1Deleted branch hotfix-1.2.1 (was abbe5d6). Summary This branch model is actually nothing new nothing stirring, beginning of this article that 'the greatest picture' has He proved a huge role in our engineering projects. It will form an elegant ideal model, and very easy to understand, this model also allows team members to form an idea about the same branch and the release process. There is provided a high-quality PDF versions of branch model diagram. Go, hang it on the wall at any time for quick reference. Git-branching-model.pdf updated: any need for him, there is a main figure of gitflow-model.src.key file if you want to contact me,nvie on TwitterA successful Git branching model