Thanks a lot, Rohit.

-min

On 11/29/12 1:55 PM, "Rohit Yadav" <rohit.ya...@citrix.com> wrote:

>
>On 29-Nov-2012, at 11:21 AM, Min Chen <min.c...@citrix.com> wrote:
>
>> Thanks Rohit. By following your recommended workflow, I was able to
>>create
>> a patch for my current review. But here comes another scenario that I
>>need
>> some guidance: now I need to work on another list api refactoring in
>> parallel while current review https://reviews.apache.org/r/8172 is still
>> pending, but the new work needs to depend on the new code that is
>>pending
>> review and thus is not yet in remote api_refactoring branch yet. Based
>>on
>> your workflow, I should do this:
>> 1) git checkout api_refactoring  (my local branch tracking remote
>> api_refactoring branch)
>> 2) git pull origin api_refactoring
>> 3) git checkout -b mybranch2
>
>It may help if you can draw your changes, git commits and branches are
>basically link lists.
>
>Checkout mybranch2 from mybranch1 (the one on which your upstream feature
>is).
>Next assume that the patch you created from mybranch1 will work, continue
>working on mybranch2. If reviewer suggest something, change in mybranch1
>and commit it. Next, cherry pick the same commit on mybranch2, this way
>your downstream is in sync with mybranch1. Work on mybranch2, when done,
>squash on a temp. branch out of current b2, you'll get a new patch. I
>prefer squashing because, it saves reviewers from handling merge
>conflicts. Checkout git NVIE model, which is recommended for all, once
>you understand why we've branching and most important merging in git, it
>will make your workflow very easy:
>http://nvie.com/posts/a-successful-git-branching-model/
>
>If this shows up correctly in your mail client:
>
>api_refactoring
>|
>b1->commit-new-feature1->new-change-after-review
>         |                                       |
>         |        
>squash-or-temp-branch-for-b2->squash-here-b2-when-done->handle merge
>conflicts, create new patch for feature in b2
>         |        
>         b2->work-on-feature2->cherry-pick <new-change-after-review> from
>b1, handle merge conflicts if any->continue your work
>
>
>Hope this helps.
>
>> But I cannot work on mybranch2 for my new feature changes since
>> "mybranch2" does not have the required code currently in review. What
>> should I do now? Apply the pending patch to mybranch2? If so, what is
>>the
>> right procedure for me to create the second patch after the first patch
>>is
>> approved and checked into remote api_refactoring branch?
>> 
>> Thanks
>> -min
>> 
>> On 11/28/12 10:14 PM, "Rohit Yadav" <rohit.ya...@citrix.com> wrote:
>> 
>>> You don't sync your personal branch, "mybranch" with remote branch
>>>unless
>>> required, you can cherry pick commits too. When you create a patch by
>>> merge --squash this would create a single patch that is difference
>>> between the branch on which you're squashing/merging and your personal
>>> branch, so this would get all the new commits as one.  Other way to
>>> squash is to use git rebase -i HEAD~5 (this will let you interactively
>>> rebase last five commits), say you've four commits/changes, you squash
>>> them into one commit by changing the "pick" to "squash" and rebasing.
>>> 
>>> If your new changes rely on code from remote branch, git pull them on
>>>to
>>> your local branch tracking the remote branch and cherry pick commits to
>>> your personal "mybranch", after you're done, you can squash them. Other
>>> ways are you do this; git pull --rebase origin x (x is the remote
>>>branch,
>>> and you're in your personal "mybranch"). Goto 2.
>>> 
>>> For your last question, you actually created a branch called
>>>api-refactor
>>> that tracks a remote branch "api_refactoring" (so you actually created
>>>a
>>> local branch with a different name, I usually keep same names for local
>>> branches that track remote ones) which is fine. Now do:
>>> 1. git checkout -b <my new feature branch name on api_refactoring> #
>>>this
>>> is your personal branch off api-refactor
>>> 1a. git am <prev patches or wip patches>
>>> 2. git add/commit new changes, no code in staging area (nothing that
>>> requires to be committed)
>>> 3. Once you're done, git checkout api-refactor and git pull origin
>>> api_refactoring (switch to the local branch tracking remote one and
>>>gets
>>> latest code), next git checkout -b tempsquash
>>> 4. Create a single patch for review: git merge --squash "mybranch" #
>>>this
>>> can have merge conflicts which is fine, this saves the reviewer
>>>handling
>>> merge conflicts if you handle it yourself here
>>> 5. Create patch and send for review; git format-patch -o patches HEAD~1
>>> 
>>> Hope this helps.
>>> 
>>> ________________________________________
>>> From: Min Chen [min.chen@citrix
>>> Sent: Thursday, November 29, 2012 11:04 AM
>>> To: cloudstack-dev@incubator.apache.org
>>> Cc: cloudstack-dev@incubator.apache.org
>>> Subject: Re: Need help in updating patch for Review Request
>>> 
>>> Thanks Rohit.
>>> 
>>> Two more questions:
>>> 1. In your step 6, when I go back to "my ranch" to make more changes,
>>>do
>>> i need to make "mybranch" sync with remote branch? what if my new
>>>changes
>>> rely on new code from remote branch? In my case, my new changes are
>>> adding new unit tests which relies on a change of pom.xml .
>>> 2. Currently I have implemented all my changes on a local branch
>>>created
>>> using
>>> 
>>> Git checkout -b api-refactor origin/api_refactoring
>>> 
>>> What should I do now?
>>> 
>>> -min
>>> 
>>> Sent from my iPhone
>>> 
>>> On Nov 28, 2012, at 6:59 PM, "Rohit Yadav" <rohit.ya...@citrix.com>
>>>wrote:
>>> 
>>>> Min, here how my workflow is now irrespective of the fact that one can
>>>> commit or not this works for me:
>>>> 
>>>> 0. Rule 0, you never ever work on the branch that tracks a remote
>>>> branch, i.e. on master or on api_refactoring for example.
>>>> 1. Say I want to work on a branch x (can be master, can be
>>>> api_refactoring), I create my own personal branch; git checkout x; git
>>>> checkout -b mybranch
>>>> 2. I work on my branch "mybranch", add commit, there may be 100
>>>> commits, does not matter.
>>>> 3. Time to send it for review? git checkout master or git checkout x
>>>> (remember x was your local branch that tracks a remote branch); git
>>>>pull
>>>> origin x;
>>>> create a merge branch, a merge branch is basically a temporary branch
>>>> where you would squash all your 100 commits from your "mybranch" to
>>>>one
>>>> commit:
>>>> git checkout -b mysquashbranch
>>>> 4. Time to squash all 100 commits to one commit:
>>>> git merge --squash "mybranch" (you're on the mysquashbranch)
>>>> 5. git format patch -o <dir> HEAD~1, email or post on review board
>>>> 6. Goto 2. make changes as suggested by reviewer. If patch accepted,
>>>> stop.
>>>> 
>>>> Hope this helps.
>>>> 
>>>> On 28-Nov-2012, at 5:55 PM, Min Chen <min.c...@citrix.com> wrote:
>>>> 
>>>>> Hi there,
>>>>> 
>>>>> I have been following instructions in
>>>>> http://incubator.apache.org/cloudstack/develop/non-contributors.html
>>>>>to
>>>>> create patch for API refactoring work I have been working on. The
>>>>> instruction may work well for the ideal case where the patch is
>>>>>quickly
>>>>> approved by review board, but here is my scenario that I am stuck at
>>>>> updating my patch:
>>>>> 1. I have created a private branch with an up-to-date copy of remote
>>>>> branch (api_refactoring) at time A, and done my work there, and
>>>>>created
>>>>> a patch using "git format-patch master --stdout >
>>>>>~/patch-name.patch',
>>>>> and uploaded it to create a review request, this is perfectly fine.
>>>>> 2. Reviewer reviewed it and provided some feedback that I need to
>>>>> address.
>>>>> 3. Then I am working on addressing the feedback on my private branch
>>>>> and done, need to update the patch for another review.
>>>>> 4. Just at the same time, remote api_refactoring branch is synced
>>>>>with
>>>>> master branch and bring in a lot of new commits that are missing in
>>>>>my
>>>>> private branch created at time A when I started my api refactoring
>>>>>work.
>>>>> 5. So I have to sync my private branch to pull in latest code from
>>>>> remote api_refactoring and merge conflicts.
>>>>> 6. After all these, what command should I use to create an updated
>>>>> patch for review board? The documented command "git format-patch
>>>>>master
>>>>> --stdout > ~/patch-name.patch" will generate a patch file with all
>>>>> those commits brought in from master sync, and also uploading the
>>>>> generated patch to review board will give out error.
>>>>> 
>>>>> Really appreciate that somebody can provide a quick tip on this. I
>>>>> keep running into such issues by working on a separate non-master
>>>>> branch.
>>>>> 
>>>>> Thanks
>>>>> -min
>>>> 
>> 
>

Reply via email to