* git-pull-script on my linus tree fails.. @ 2005-06-21 12:07 Dave Airlie 2005-06-21 15:39 ` Linus Torvalds 0 siblings, 1 reply; 16+ messages in thread From: Dave Airlie @ 2005-06-21 12:07 UTC (permalink / raw) To: linux-kernel, torvalds I had a git archive from just after 2.6.12-rc6, which I've not touched on my local system.. Now I've just done cd linux-2.6 git-pull-script rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git And I get: sent 69638 bytes received 17423079 bytes 52928.04 bytes/sec total size is 135185594 speedup is 7.73 Updating from 27198d855abbfc82df69e81b6c8d2f333580114c to 1d345dac1f30af1cd9f3a1faa12f9f18f17f236e. Destroying all noncommitted data! Kill me within 3 seconds.. fatal: Entry 'Documentation/DocBook/scsidrivers.tmpl' would be overwritten by merge. Cannot merge. but I haven't touched that tree so I shouldn't get merge issues.. whatsup? Dave. -- David Airlie, Software Engineer http://www.skynet.ie/~airlied / airlied at skynet.ie Linux kernel - DRI, VAX / pam_smb / ILUG ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: git-pull-script on my linus tree fails.. 2005-06-21 12:07 git-pull-script on my linus tree fails Dave Airlie @ 2005-06-21 15:39 ` Linus Torvalds 2005-06-21 15:56 ` Jeff Garzik 0 siblings, 1 reply; 16+ messages in thread From: Linus Torvalds @ 2005-06-21 15:39 UTC (permalink / raw) To: Dave Airlie; +Cc: linux-kernel On Tue, 21 Jun 2005, Dave Airlie wrote: > > fatal: Entry 'Documentation/DocBook/scsidrivers.tmpl' would be overwritten > by merge. Cannot merge. > > but I haven't touched that tree so I shouldn't get merge issues.. > > whatsup? The most common issue is that your index is not in sync. For many operations, that's just goign to slow things down a lot (ie a diff migth take a long time instead of being instantaneous), but for a merge it's considered an error. Does "git-diff-files -p" show any output? That's a dead give-away. Do "git-update-cache --refresh" to make sure your index file matches your working directory. I guess I can make the "git pull" script do that automatically (some other scripts do, like "git commit", which also depends on having an up-to-date index). Linus ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: git-pull-script on my linus tree fails.. 2005-06-21 15:39 ` Linus Torvalds @ 2005-06-21 15:56 ` Jeff Garzik 2005-06-21 17:06 ` Linus Torvalds 0 siblings, 1 reply; 16+ messages in thread From: Jeff Garzik @ 2005-06-21 15:56 UTC (permalink / raw) To: Linus Torvalds; +Cc: Dave Airlie, linux-kernel Linus Torvalds wrote: > I guess I can make the "git pull" script do that automatically (some other > scripts do, like "git commit", which also depends on having an up-to-date > index). Slight tangent... it would be nice if you would write a 2-line git-checkout-script, which provides the modern version of git-read-tree -m HEAD && git-checkout-cache -q -f -u -a Note that I do depend on this command blowing away working dir changes, but maybe you would want that to be a separate arg. Then you could add a "-u" arg, or somesuch, to the situations like git pull that want an up-to-date index. Jeff ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: git-pull-script on my linus tree fails.. 2005-06-21 15:56 ` Jeff Garzik @ 2005-06-21 17:06 ` Linus Torvalds 2005-06-21 17:28 ` Jeff Garzik 0 siblings, 1 reply; 16+ messages in thread From: Linus Torvalds @ 2005-06-21 17:06 UTC (permalink / raw) To: Jeff Garzik; +Cc: Dave Airlie, linux-kernel On Tue, 21 Jun 2005, Jeff Garzik wrote: > > Slight tangent... it would be nice if you would write a 2-line > git-checkout-script, which provides the modern version of > > git-read-tree -m HEAD && git-checkout-cache -q -f -u -a > > Note that I do depend on this command blowing away working dir changes, > but maybe you would want that to be a separate arg. Added. Feel free to try it out, but it's very lightly tested. You can do just "git checkout" and it will checkout the current HEAD, but won't overwrite anything old. Use the "-f" flag to force overwrite. It can also take a new HEAD, ie you can check out the parent of the current HEAD by doing git checkout HEAD^ and if you actually want to set the HEAD to that parent you can do so with the "-u" flag, so git checkout -u HEAD^ is basically equivalent to "undo the topmost commit". It's not quite your "switch", though, because it will always _write_ to the current HEAD, it won't be switching the current HEAD around to another branch. I almost think that behavkiour would be more useful, I'll think about how to do it sanely. Linus ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: git-pull-script on my linus tree fails.. 2005-06-21 17:06 ` Linus Torvalds @ 2005-06-21 17:28 ` Jeff Garzik 2005-06-21 17:42 ` Linus Torvalds 0 siblings, 1 reply; 16+ messages in thread From: Jeff Garzik @ 2005-06-21 17:28 UTC (permalink / raw) To: Linus Torvalds; +Cc: Dave Airlie, linux-kernel Linus Torvalds wrote: > It's not quite your "switch", though, because it will always _write_ to > the current HEAD, it won't be switching the current HEAD around to another > branch. I almost think that behavkiour would be more useful, I'll think > about how to do it sanely. The reason I requested git-checkout-script is to make git-switch-tree pretty much trivial. The new git-switch-tree will sit on top of git-checkout-script, like if $1 switch HEAD to refs/heads/$1 git-checkout-script So, as created, git-checkout-script is a useful foundation for other scripts. As of right now, I only have two[1] scripts that are non-vanilla: git-switch-tree: retarget .git/HEAD to refs/heads/$1 git-new-branch: cp refs/heads/master refs/heads/$1 With git-checkout-script, both of these are now trivial and obvious. Jeff [1] Actually I have a third, 'git-changes-script'. The only reason I use this is that it supports the old BitKeeper syntax of cd my-repo-2.6 git-changes-script -L ../linux-2.6 to obtain a list of changes that are _only_ present in my-repo-2.6, and not in ../linux-2.6 repo. git-changes-script works with .git/HEAD at the repo level, and knows nothing of branches (which is fine). ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: git-pull-script on my linus tree fails.. 2005-06-21 17:28 ` Jeff Garzik @ 2005-06-21 17:42 ` Linus Torvalds 2005-06-21 17:53 ` Jeff Garzik 0 siblings, 1 reply; 16+ messages in thread From: Linus Torvalds @ 2005-06-21 17:42 UTC (permalink / raw) To: Jeff Garzik; +Cc: Dave Airlie, linux-kernel On Tue, 21 Jun 2005, Jeff Garzik wrote: > > The reason I requested git-checkout-script is to make git-switch-tree > pretty much trivial. The new git-switch-tree will sit on top of > git-checkout-script, like > > if $1 > switch HEAD to refs/heads/$1 > git-checkout-script Actually, I'd suggest doing the git-checkout-script _first_. That way you _can_ use the careful version, which refuses to switch if it would cause information to be lost. Ie something like git-checkout-script $1 && switch HEAD to refs/heads/$1 should do it. (And then you can choose to use the "-f" flag or not to git-checkout-script depending on whether you want to force it). Anyway, I think the branch switching behaviour is useful enough that I should make git-checkout-script understand the notion of switching to a new branch natively. Linus ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: git-pull-script on my linus tree fails.. 2005-06-21 17:42 ` Linus Torvalds @ 2005-06-21 17:53 ` Jeff Garzik 2005-06-21 18:08 ` Linus Torvalds 0 siblings, 1 reply; 16+ messages in thread From: Jeff Garzik @ 2005-06-21 17:53 UTC (permalink / raw) To: Linus Torvalds; +Cc: Dave Airlie, linux-kernel Linus Torvalds wrote: > Actually, I'd suggest doing the git-checkout-script _first_. That way you > _can_ use the careful version, which refuses to switch if it would cause > information to be lost. Ie something like > > git-checkout-script $1 && switch HEAD to refs/heads/$1 > > should do it. If I want my working dir updated to reflect the desired branch -- the whole purpose of git-switch-tree -- I would have to do git-checkout-script && switch HEAD && git-checkout-script which is a bit silly. Jeff ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: git-pull-script on my linus tree fails.. 2005-06-21 17:53 ` Jeff Garzik @ 2005-06-21 18:08 ` Linus Torvalds 2005-06-21 18:17 ` Jeff Garzik 0 siblings, 1 reply; 16+ messages in thread From: Linus Torvalds @ 2005-06-21 18:08 UTC (permalink / raw) To: Jeff Garzik; +Cc: Dave Airlie, linux-kernel On Tue, 21 Jun 2005, Jeff Garzik wrote: > > If I want my working dir updated to reflect the desired branch -- the > whole purpose of git-switch-tree -- I would have to do > > git-checkout-script && switch HEAD && git-checkout-script No, you don't understand. The git-checkout-script already takes a parameter to indicate _what_ to check out. It just defaults to head. So you'd do git-checkout-script branch && switch branch and you'd be done. Anyway, I liked the branch semantics for "git checkout" so much that I just made it do that by default. In other words, if you do git checkout 'branch' it will both check out the new branch contents and switch HEAD to branch. It will refuse to overwrite any data, but as before, you can force that with "git checkout -f branch" instead. If the argument to "git checkout" isn't a branch-name, but some other name (like "v2.6.12" or an extended expression like "HEAD^" for "parent of HEAD"), it will just check it out, but it obviously won't be switching any branches around (and it will leave HEAD untouched). These seem like sane and useful semantics, and your "switch" script should really fall out as "git checkout -f". Linus ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: git-pull-script on my linus tree fails.. 2005-06-21 18:08 ` Linus Torvalds @ 2005-06-21 18:17 ` Jeff Garzik 2005-06-21 18:25 ` Linus Torvalds 0 siblings, 1 reply; 16+ messages in thread From: Jeff Garzik @ 2005-06-21 18:17 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-kernel Linus Torvalds wrote: > No, you don't understand. The git-checkout-script already takes a > parameter to indicate _what_ to check out. It just defaults to head. > > So you'd do > > git-checkout-script branch && switch branch > > and you'd be done. ah, ok. > Anyway, I liked the branch semantics for "git checkout" so much that I > just made it do that by default. In other words, if you do [...] > These seem like sane and useful semantics, and your "switch" script should > really fall out as "git checkout -f". If git-checkout-script switches the .git/HEAD symlink properly, rather than updating the symlink target's contents, then my git-switch-tree script can just go away :) Thanks, Jeff ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: git-pull-script on my linus tree fails.. 2005-06-21 18:17 ` Jeff Garzik @ 2005-06-21 18:25 ` Linus Torvalds 2005-06-21 23:52 ` Jeff Garzik 0 siblings, 1 reply; 16+ messages in thread From: Linus Torvalds @ 2005-06-21 18:25 UTC (permalink / raw) To: Jeff Garzik; +Cc: linux-kernel On Tue, 21 Jun 2005, Jeff Garzik wrote: > > If git-checkout-script switches the .git/HEAD symlink properly, rather > than updating the symlink target's contents, then my git-switch-tree > script can just go away :) Well, you should test it. I sure didn't ;) It's there on master.kernel.org now, but it hasn't percolated to the mirrors (including webgit) yet. The thing that I _think_ should work has a top commit of "git checkout: fix default head case". Linus ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: git-pull-script on my linus tree fails.. 2005-06-21 18:25 ` Linus Torvalds @ 2005-06-21 23:52 ` Jeff Garzik 2005-06-21 23:54 ` Jeff Garzik 0 siblings, 1 reply; 16+ messages in thread From: Jeff Garzik @ 2005-06-21 23:52 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-kernel Linus Torvalds wrote: > > On Tue, 21 Jun 2005, Jeff Garzik wrote: > >>If git-checkout-script switches the .git/HEAD symlink properly, rather >>than updating the symlink target's contents, then my git-switch-tree >>script can just go away :) > > > Well, you should test it. I sure didn't ;) hmmm, I tried git checkout -f ncq on libata-dev.git and it didn't seem to switch the symlink. Jeff ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: git-pull-script on my linus tree fails.. 2005-06-21 23:52 ` Jeff Garzik @ 2005-06-21 23:54 ` Jeff Garzik 2005-06-22 0:13 ` Linus Torvalds 0 siblings, 1 reply; 16+ messages in thread From: Jeff Garzik @ 2005-06-21 23:54 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-kernel Jeff Garzik wrote: > Linus Torvalds wrote: > >> >> On Tue, 21 Jun 2005, Jeff Garzik wrote: >> >>> If git-checkout-script switches the .git/HEAD symlink properly, >>> rather than updating the symlink target's contents, then my >>> git-switch-tree script can just go away :) >> >> >> >> Well, you should test it. I sure didn't ;) > > > hmmm, I tried > > git checkout -f ncq > > on libata-dev.git and it didn't seem to switch the symlink. It does seem to hit the final branch in the script: > [jgarzik@pretzel libata-dev]$ sh -x /usr/local/bin/git-checkout-script -f ncq > + : .git > ++ git-rev-parse HEAD > + old=7df551254add79a445d2e47e8f849cef8fee6e38 > + new= > + force= > + branch= > + '[' 2 '!=' 0 ']' > + arg=-f > + shift > + case "$arg" in > + force=1 > + i=1 > + '[' 1 '!=' 0 ']' > + arg=ncq > + shift > + case "$arg" in > ++ git-rev-parse ncq > + rev=d032ec9048ff82a704b96b93cfd6f2e8e3a06b19 > + '[' -z d032ec9048ff82a704b96b93cfd6f2e8e3a06b19 ']' > + '[' '' ']' > + new=d032ec9048ff82a704b96b93cfd6f2e8e3a06b19 > + '[' -f .git/revs/heads/ncq ']' > + i=2 > + '[' 0 '!=' 0 ']' > + '[' -z d032ec9048ff82a704b96b93cfd6f2e8e3a06b19 ']' > + '[' 1 ']' > + git-read-tree --reset d032ec9048ff82a704b96b93cfd6f2e8e3a06b19 > + git-checkout-cache -q -f -u -a > + '[' 0 -eq 0 ']' > + '[' '' ']' > + rm -f .git/MERGE_HEAD Regards, Jeff ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: git-pull-script on my linus tree fails.. 2005-06-21 23:54 ` Jeff Garzik @ 2005-06-22 0:13 ` Linus Torvalds 2005-06-22 0:46 ` Jeff Garzik 0 siblings, 1 reply; 16+ messages in thread From: Linus Torvalds @ 2005-06-22 0:13 UTC (permalink / raw) To: Jeff Garzik; +Cc: linux-kernel On Tue, 21 Jun 2005, Jeff Garzik wrote: > Jeff Garzik wrote: > > It does seem to hit the final branch in the script: > > > [jgarzik@pretzel libata-dev]$ sh -x /usr/local/bin/git-checkout-script -f ncq > > + new=d032ec9048ff82a704b96b93cfd6f2e8e3a06b19 > > + '[' -f .git/revs/heads/ncq ']' Oops. Typo of mine. "revs" is incorrect, it should be "refs". So because it's testing the wrong directory for the branch name, it obviously won't find the branch, and decides that you used just a regular commit name. I bet that one-character fix will fix it. Pushed out, Linus ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: git-pull-script on my linus tree fails.. 2005-06-22 0:13 ` Linus Torvalds @ 2005-06-22 0:46 ` Jeff Garzik 2005-06-22 1:18 ` Linus Torvalds 0 siblings, 1 reply; 16+ messages in thread From: Jeff Garzik @ 2005-06-22 0:46 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-kernel Linus Torvalds wrote: > Oops. Typo of mine. "revs" is incorrect, it should be "refs". > > So because it's testing the wrong directory for the branch name, it > obviously won't find the branch, and decides that you used just a regular > commit name. git-checkout-script is now switching branches correctly :) Now stay tuned for my next email, where I demonstrate how to reproduce git-prune-script eating data :) Jeff ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: git-pull-script on my linus tree fails.. 2005-06-22 0:46 ` Jeff Garzik @ 2005-06-22 1:18 ` Linus Torvalds 2005-06-22 5:51 ` Jeff Garzik 0 siblings, 1 reply; 16+ messages in thread From: Linus Torvalds @ 2005-06-22 1:18 UTC (permalink / raw) To: Jeff Garzik; +Cc: linux-kernel On Tue, 21 Jun 2005, Jeff Garzik wrote: > > git-checkout-script is now switching branches correctly :) Goodie. > Now stay tuned for my next email, where I demonstrate how to reproduce > git-prune-script eating data :) Before you demonstrate that, let me give you a quick warning on a very useful but also very peculiar and perhaps baffling feature of my version of "git checkout" as opposed to your "git switch". In particular, think about what happens when you have changes in your working directory, and you use "git checkout <newbranch>" (that is, without the "-f" flag). Now, if those changes actually _clash_ with the difference in the branch you're switching to, you'll get an error (something like "Entry 'filename' not uptodate. Cannot merge."). But if you have only edited files that are the _same_ in both branches, then when you switch branches, those edits will literally _follow_ you into the new branch. Before, with your "git switch" script, any pending dirty state just got thrown away. Now, I'm convinced this is actually exactly the behaviour you want, but I thought I'd mention it before you notice it on your own and get confused. And hey, if you don't like the feature, you can always just use the "-f" flag, which will act the way your old script did, and always just throw any pending changes away when you check out a new branch. Linus ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: git-pull-script on my linus tree fails.. 2005-06-22 1:18 ` Linus Torvalds @ 2005-06-22 5:51 ` Jeff Garzik 0 siblings, 0 replies; 16+ messages in thread From: Jeff Garzik @ 2005-06-22 5:51 UTC (permalink / raw) To: Linus Torvalds; +Cc: linux-kernel Linus Torvalds wrote: > And hey, if you don't like the feature, you can always just use the "-f" > flag, which will act the way your old script did, and always just throw > any pending changes away when you check out a new branch. hehe, that's what I am doing ;-) For fast-forward merges, I use "git checkout". For everything else in my workflow, I use "git checkout -f $branch" I'm not sure that I, personally, will ever use "git checkout $branch" without "-f". Jeff ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2005-06-22 9:21 UTC | newest] Thread overview: 16+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2005-06-21 12:07 git-pull-script on my linus tree fails Dave Airlie 2005-06-21 15:39 ` Linus Torvalds 2005-06-21 15:56 ` Jeff Garzik 2005-06-21 17:06 ` Linus Torvalds 2005-06-21 17:28 ` Jeff Garzik 2005-06-21 17:42 ` Linus Torvalds 2005-06-21 17:53 ` Jeff Garzik 2005-06-21 18:08 ` Linus Torvalds 2005-06-21 18:17 ` Jeff Garzik 2005-06-21 18:25 ` Linus Torvalds 2005-06-21 23:52 ` Jeff Garzik 2005-06-21 23:54 ` Jeff Garzik 2005-06-22 0:13 ` Linus Torvalds 2005-06-22 0:46 ` Jeff Garzik 2005-06-22 1:18 ` Linus Torvalds 2005-06-22 5:51 ` Jeff Garzik
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox