<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Nov 8, 2019 at 3:32 PM Joan Lluch via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Hi All,<br>
<br>
Ok, just for the matter of providing feedback that may be useful for others, I figured out one way to do it based on the setup that I described earlier. It can be something like this<br>
<br>
git checkout patchbranch    # checkout to the patch branch, this is the one containing the differential patch code<br>
git checkout -b tmp              # checkout to a new tmp branch<br>
git reset —soft master         # set the tmp head to the master head without touching any files, so now the next commit will contain the delta from master<br></blockquote><div><br></div><div>This recipe is not correct in the absolute: the delta from master does not mean it contains exactly what you want, you seem to assume that master didn't evolve between the time "patchbranch" was created.</div><div><br></div><div>-- </div><div>Mehdi</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
git commit                            # commit the delta from master, this is the where to add the required commit message and the 'Differential Revision' URL<br>
git push origin tmp:master   # push the tmp branch to the remote ‘master’ branch<br>
(the tmp branch can be deleted now as it will have no more use)<br>
<br>
Now, if the master to patchbranch diff has been properly submitted to Phabricator, all the steps above except the last one can be replaced by executing this:<br>
<br>
git checkout master<br>
arc patch D<revision><br>
<br>
According to the docs, "this will create a new branch called arcpatch-D<Revision> based on the current master and will create a commit corresponding to D<Revision> with a commit message derived from information in the Phabricator review"<br>
<br>
This also sets the current branch to arcpatch-D<Revision>, so the only remaining thing to do is pushing the changes to the remote master:<br>
<br>
git push origin arcpatch-D<Revision>:master<br>
<br>
That’s all. The git system will inform whether there’s been another commit being pushed while preparing this one, in such case it would require to start over with a fresh pull from master<br>
<br>
John<br>
<br>
<br>
<br>
<br>
> On 8 Nov 2019, at 17:48, Blower, Melanie <<a href="mailto:melanie.blower@intel.com" target="_blank">melanie.blower@intel.com</a>> wrote:<br>
> <br>
> No doubt there's a way that's not interactive.  There's a free online copy of the "pro git" tome online, for what it's worth!<br>
> <br>
>> -----Original Message-----<br>
>> From: Joan Lluch <<a href="mailto:joan.lluch@icloud.com" target="_blank">joan.lluch@icloud.com</a>><br>
>> Sent: Friday, November 8, 2019 11:46 AM<br>
>> To: Blower, Melanie <<a href="mailto:melanie.blower@intel.com" target="_blank">melanie.blower@intel.com</a>><br>
>> Cc: llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>>; Sanjay Patel <<a href="mailto:spatel@rotateright.com" target="_blank">spatel@rotateright.com</a>><br>
>> Subject: Re: [llvm-dev] Workflow to commit changes using git alone (?)<br>
>> <br>
>> <br>
>> Hi Melanie,<br>
>> <br>
>> I would have hoped for a more automatic way, but I will give “--amend” a try.<br>
>> <br>
>> Thanks for that!<br>
>> <br>
>> John<br>
>> <br>
>> <br>
>>> On 8 Nov 2019, at 17:36, Blower, Melanie <<a href="mailto:melanie.blower@intel.com" target="_blank">melanie.blower@intel.com</a>><br>
>> wrote:<br>
>>> <br>
>>> <br>
>>> <br>
>>>> -----Original Message-----<br>
>>>> From: Joan Lluch <<a href="mailto:joan.lluch@icloud.com" target="_blank">joan.lluch@icloud.com</a>><br>
>>>> Sent: Friday, November 8, 2019 11:29 AM<br>
>>>> To: Blower, Melanie <<a href="mailto:melanie.blower@intel.com" target="_blank">melanie.blower@intel.com</a>><br>
>>>> Cc: llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>>; Sanjay Patel<br>
>>>> <<a href="mailto:spatel@rotateright.com" target="_blank">spatel@rotateright.com</a>><br>
>>>> Subject: Re: [llvm-dev] Workflow to commit changes using git alone<br>
>>>> (?)<br>
>>>> <br>
>>>> Hi Melanie,<br>
>>>> <br>
>>>> Thanks for your reply, but if I understand it well, this implies<br>
>>>> making changes to the local ‘main’ branch, and push from that, which<br>
>>>> is what I want to avoid. But still, if I push from ‘main’, how do I<br>
>>>> fold a number of local commits into a single one, with a single comment, as<br>
>> appropriate for LLVM?.<br>
>>> [Blower, Melanie] I'm not a sophisticated git user, but I do know how to fold<br>
>> local commits.<br>
>>> % git commit --amend<br>
>>> Assuming your workspace has several commits and you want to compress<br>
>>> then into 1 before push This is an interactive process, git will pop<br>
>>> you into an editor, maybe 'vi' with a bunch of SHA codes listed. What<br>
>>> I do is, Keep the top line unmodified, on subsequent lines use the 's' letter to<br>
>> indicate that you want to squash it into the previous After you write out the file<br>
>> that git put you into, it will prompt you again to finalize the commit message for<br>
>> the compressed commit. It's all local so you can give it a try.<br>
>>>> <br>
>>>> My workflow consists on creating different local branches to avoid<br>
>>>> changes on the ‘main’ branch. This allows me a couple of things:<br>
>>>> First, I always keep my local ‘main’ branch in sync with the remote<br>
>>>> one, so it’s very easy to spot differences with my working ones by<br>
>>>> just running diff between them. Second, I can do an undo things, or<br>
>>>> test them in my working branches as many times as I want and commit<br>
>>>> often. I can even start from scratch from main again by just creating<br>
>>>> a new branch from that, without ever messing with the ‘main’ branch.<br>
>>>> Also, separating work into branches allows for implementing another patch<br>
>> while a previous one is waiting review, (while still never touching ‘main’).<br>
>>>> <br>
>>>> In the past, I worked using a similar environment on a small team.<br>
>>>> Everyone's local changes were pushed to the remote repo at the end of<br>
>>>> the day by first merging into our local ‘main’ and then pushing to<br>
>>>> the remote ‘master’. This works on a small team because it doesn’t<br>
>>>> matter if a number of local commits get pushed together. Also<br>
>>>> everybody is happy to fix conflicts created by others if they happen, as<br>
>> there’s no ‘reviews’ to begin with.<br>
>>>> <br>
>>>> In the case of LLVM it’s desirable that every reviewed patch is<br>
>>>> pushed as a single commit with the appropriate comment. Ideally, I<br>
>>>> would want to commit and push the difference between a local working<br>
>>>> branch and the ‘main’ branch, which is what I can’t figure out how do<br>
>>>> do. I would be surprised if there’s not a simple solution for that.<br>
>>>> <br>
>>>> Thanks.<br>
>>>> <br>
>>>> John<br>
>>>> <br>
>>>> <br>
>>>> <br>
>>>>> On 8 Nov 2019, at 16:24, Blower, Melanie <<a href="mailto:melanie.blower@intel.com" target="_blank">melanie.blower@intel.com</a>><br>
>>>> wrote:<br>
>>>>> <br>
>>>>> <br>
>>>>> <br>
>>>>>> -----Original Message-----<br>
>>>>>> From: llvm-dev <<a href="mailto:llvm-dev-bounces@lists.llvm.org" target="_blank">llvm-dev-bounces@lists.llvm.org</a>> On Behalf Of Joan<br>
>>>>>> Lluch via llvm-dev<br>
>>>>>> Sent: Friday, November 8, 2019 6:35 AM<br>
>>>>>> To: llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>><br>
>>>>>> Subject: [llvm-dev] Workflow to commit changes using git alone (?)<br>
>>>>>> <br>
>>>>>> Hi all,<br>
>>>>>> <br>
>>>>>> I have recently given commit access to LLVM and successfully pushed<br>
>>>>>> a test commit from my local master branch.<br>
>>>>>> <br>
>>>>>> However, I can’t find which is the recommended workflow for<br>
>>>>>> committing more serious stuff using git alone. I have read the docs<br>
>>>>>> but everything seems to still require svn before bridging to github.<br>
>>>>>> I want to use git alone to commit a patch that I got reviewed.<br>
>>>>> [Blower, Melanie]<br>
>>>>> I recently made my first commit to llvm using git, I can't speak to<br>
>>>>> whether this<br>
>>>> is recommended flow. First get code review and approval, then:<br>
>>>>> git clone <a href="https://github.com/llvm/llvm-project.git" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project.git</a> ## get the llvm<br>
>>>>> tree ## apply your patch, test your patch Git add ... files Git<br>
>>>>> commit ... commit message should include url to the phabricator<br>
>>>>> review Git pull --rebase ## if your clone is behind master, do this<br>
>>>>> to pull in the changes neatly Git push ## This will prompt you to<br>
>>>>> provide github identity<br>
>>>>> <br>
>>>>>> <br>
>>>>>> I currently have a local 'master' branch that I keep identical to<br>
>>>>>> the upstream branch. I also have another local branch (let's call<br>
>>>>>> it 'patchbranch' for the purposes of this question) where I<br>
>>>>>> committed the changes for the patch I want to push. I created the<br>
>>>>>> diff file by running git<br>
>>>> diff to compare my local 'master'<br>
>>>>>> with 'patchbranch’ branches and uploaded the file to Phabricator. I<br>
>>>>>> got the patch reviewed and I want to commit it now to the upstream<br>
>>>>>> master. I make sure my 'patchbranch' catches all the upstream<br>
>>>>>> changes by pulling from 'master', merging 'master' into my<br>
>>>>>> 'patchbranch and running<br>
>>>> the relevant tests.<br>
>>>>>> <br>
>>>>>> I want to push my local 'patchbranch' to the upstream ‘master’ in<br>
>>>>>> GitHub without affecting my local master branch. I also need to<br>
>>>>>> make sure that my patch is pushed as a single commit. I do not want<br>
>>>>>> to merge my local 'patchbranch' into my local 'master' because I<br>
>>>>>> want to keep<br>
>>>> my local 'master'<br>
>>>>>> clean and always identical to, or only slightly behind, the upstream branch.<br>
>>>>>> <br>
>>>>>> I have read the documentation but all the described workflows seem<br>
>>>>>> to imply the use of svn at some point, which I do not want to, or<br>
>>>>>> know how to use. I understand this is a basic question but I used<br>
>>>>>> git before with small teams only, so a detailed workflow for LLVM<br>
>>>>>> commits using<br>
>>>> git alone would be appreciated.<br>
>>>>>> <br>
>>>>>> Thanks,<br>
>>>>>> <br>
>>>>>> John<br>
>>>>>> <br>
>>>>>> <br>
>>>>>> <br>
>>>>>> <br>
>>>>>> _______________________________________________<br>
>>>>>> LLVM Developers mailing list<br>
>>>>>> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
>>>>>> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
>>> <br>
> <br>
<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div></div>