diff options
author | Florian Jung <flo@windfisch.org> | 2013-09-18 22:40:48 +0200 |
---|---|---|
committer | Florian Jung <flo@windfisch.org> | 2013-09-18 22:40:48 +0200 |
commit | 32589cdd760755d685a76d31469798fde74ad827 (patch) | |
tree | d50afd9a2a176846dd6c5b19d734ed9108e44aad /muse2/README.svn-branch | |
parent | af09b4f881888b97903cda57907cda571be83b18 (diff) | |
parent | 48a93993cfce160fb7d4cf0b67b4b77e22db19e5 (diff) |
Merge branch 'master' into audiomsg_overhaul
Diffstat (limited to 'muse2/README.svn-branch')
-rw-r--r-- | muse2/README.svn-branch | 125 |
1 files changed, 0 insertions, 125 deletions
diff --git a/muse2/README.svn-branch b/muse2/README.svn-branch deleted file mode 100644 index 94e44ed8..00000000 --- a/muse2/README.svn-branch +++ /dev/null @@ -1,125 +0,0 @@ -Branches are handy for developing larger features (especially if you -temporarily break muse and then fix it again). You might want to ask -why you shouldn't simply develop in your local working copy, and then -commit a huge chunk. Well, this has multiple reasons: - o with branches, you'll have a history, because there are many small - commits. this makes bisecting for finding a bug possible. - o when you develop your feature publicly, others can check out half-done - versions, and already test the one half. they also could fix bugs. - o another advantage of keeping it public is: others can see whether you - may exclude some use case and inform you about that in time. otherwise - you'd spend lots of work in a design which was obsolete from the - beginning. - o and it shows that there's something going on :) - -also, branching makes "feature freezes" easier, for release planning. - -General note: ^/trunk means [url of the repo]/trunk. when you're inside -a working copy, svn understands the ^/trunk notation. -i assume you're inside some working copy - -whenever merging, make sure you're in the correct directory! - -CREATING A BRANCH - the following command creates a branch called yourbranch in the branches - directory, which is built upon the current (NOT the checked out!) trunk - revision: - - svn copy ^/trunk ^/branches/yourbranch - - svn copy does a "light copy", that is, as long as you don't change files, - they don't occupy any disk space. - -USING THE BRANCH - you might want to checkout every branch relevant to you into another local - copy. believe me, it makes life easier. alternatively, svn switch is your - friend. - just develop inside the working copy, then commit. - -MERGING WITH THE PARENT BRANCH (in my example: the trunk) - from time to time, you want to update your branch to represent the - current trunk plus your changes (and not an ancient trunk plus your - changes). to be safe, only merge with the parent branch, and only - merge in one direction (usually from trunk into your branch), unless - you know what you're doing. if you're reading and not skimming this, - you're probably NOT knowing. svn help and google are your friends. - - be in your branch'es working directory root (the dir which is containing - all the files/dirs also trunk (the parent) is containing as well. - - svn merge ^/trunk --accept postpone - - does the job for you. there might be conflicts, when both in your branch - and in trunk some file has been changes at a similar location. svn by - default asks you what to do then, which is annoying. --accept postpone - turns this off, and gives you a summary at the end of the merge. - - If There Were Conflicts: - if any file in "svn status"'s output has a C in front of it, there are - conflicts. open the file in your editor, and look for markers like - "<<<<<", "=====" and ">>>>>". these show what code is in the trunk - (between <<<< and ====), and what code is in your branch (between - ==== and >>>>) (or vice versa. svn tells you). - you have to make it work again and save the file. - - with "svn resolved FILENAME" or "svn resolved -R some/directory" you - mark the conflicts for FILENAME or all files below some/directory as - solved. - - Another word about conflicts: there may be conflicts, even if svn doesn't - note them. ALWAYS recompile the merged code and test it. - - if done, you can commit the merge normally using "svn commit" - -PUTTING YOUR WORK BACK INTO THE PARENT BRANCH (in my example: trunk) - do a final merge from your parent branch into your branch. compile and - test. - then there are several ways to proceed: - o use svn merge --reintegrate, which doesn't work with the old repo - version muse is using :( - o go into the trunk (or the parent branch'es directory), and issue - svn merge ^/branches/yourbranch --accept theirs-full - the problem with the merge is, that every previous merge from trunk - into your branch will be applied a second time, which doesn't work. - --accept theirs-full will basically use the files in your branch. - you might want to verify with diff: - diff -R /path/to/local/trunk /path/to/local/yourbranch - there should be no differences. - - commit that to trunk: svn commit - - then, "fake-merge" trunk into your branch again. otherwise, with the - next merge from trunk into your branch, we would have the duplicate - changes problem again. if you're _SURE_ that you aren't using the - branch any more, you can leave this step out. - - svn merge ^/trunk ^/branches/yourbranch --record-only - svn commit - - - this solution is a bit hackish :( but it works - - -NOTES FOR RELEASE BRANCHES - after creating the release branch, ALL commits which are fixing bugs - must go into the release branch. ALL commits which are adding features - must go into trunk or other branches. - the team should focus on fixing bugs in the release branch. - to get the fixes into the trunk, from time to time run: - - svn merge ^/branches/releasebranch ^/trunk - svn commit (in trunk's local copy) - - when releasing the release branch, merge it into the trunk a last time, - and then never touch the release branch again. - for the next release, create a new one. - -TAGGING - when there's any reason for tagging a revision, simply do - svn copy ^/whatever ^/tags/yourtagname - read the svn manual for details - -GETTING HELP: - svn help <command> (usage notes, short explanations) - google (everything) - the svn book (->google) (long explanations) |