git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: svn versus git

From
Jakub Narebski <jnareb@gmail.com>
Date
Dec 13, 2006, 22:29 UTC
Message-ID
<elpun9$qp1$1@sea.gmane.org>
In-Reply-To
<200612132200.41420.andyparkins@gmail.com>
By the way, it would be nice to have this discussion added to GitWiki:
  http://git.or.cz/gitwiki/GitSvnComparsion
Andy Parkins wrote:
> svn cat::
> Output the contents of specified files or URLs.  Optionally at a
> specific revision.
> git cat-file -p $(git-ls-tree $REV $file | cut -d " " -f 3 | cut -f 1)::
> git-ls-tree lists the object ID for $file in revision $REV, this is cut
> out of the output and used as an argument to git-cat-file, which should
> really be called git-cat-object, and simply dumps that object to stdout.
You can use extended sha1 syntax, described in git-rev-parse(1) (although
it would be nice to have relevant parts of documentation repeated in
git-cat-file(1)), namely
  git cat-file -p REV:file
(and you can use "git cat-file -p ::file" to get index/staging area
version)
 
As for alias: what about "alias.less = --paginate cat-file -p",
set using "git repo-config alias.less '--paginate cat-file -p'"?
 
Show 14 quoted lines
> svn cleanup::
> Recursively clean up the working copy, removing locks, resuming
> unfinished operations, etc.
> git fsck-objects::
> git prune::
> git repack::
> Check the repository for consistency, remove unreferenced objects, or
> recompress existing objects.
> 
> They don't really serve the exact same purpose, but they are all
> maintenance commands.
> 
> Subversion wins, as it only has one command and you don't need to
> understand the repository in order to understand what its doing.
git-fsck-objects is needed only if something doesn't work when
it should. "git repack" is safe, "git repack -a -d" is almost safe,
while "git prune" is not.
 
Show 8 quoted lines
> svn export::
> Create an unversioned copy of a tree.
> git archive::
> Creates an archive of the files in the named tree.
> 
> Git wins.  It can make zip/tar directly and add directory prefixes
> should you want them.  It could perhaps be a modicum easier if it had a
> default output format so that "git-archive HEAD" would do something.
Perhaps git-archive should support "tree" format, i.e. writing
unversioned copy of a tree to filesystem.
 
Show 12 quoted lines
> svn resolved::
> Remove 'conflicted' state on working copy files or directories.
> git update-index::
> git checkout::
> Git doesn't have a direct "resolved"; after you fix conflicts, you push
> the changes into the staging area with "git-update-index".
> Alternatively you can simply accept the version in HEAD by checking out
> that version.
> 
> Draw.  "svn-resolved" is rubbish, as it doesn't do any checks, it just
> removes the conflict markers.  Git could do with something that makes
> life easier than understanding the index.
There was discussion about adding thin wrapper around git-update-index
to specifically mark resolved merge conflicts. The option to pick up
ours, theirs, ancestor version is another argument for having such command.
 
Show 12 quoted lines
> svn revert::
> Restore pristine working copy file (undo most local edits).
> git reset --hard::
> Reset the repository to an arbitrary point in the past, updating the
> working copy as well.
> git checkout -f HEAD <file>::
> Checks out <file> from HEAD, forcing an overwrite of any working
> directory changes to that file.
> 
> Draw.  There is no easy way to undo changes that have already been
> committed to a subversion repository, so git would win.  However, it's
> uncomfortable to revert a single file using checkout.
There was talk about adding "git reset [<commit-ish>] -- <file>".
Show 9 quoted lines
> Discussion
> ----------
> 
> What would git need to do to win in every section?
> 
> Subversion won:
>  - svn cat: the git equivalent is too complicated.
>    It wouldn't be hard to write a git-cat; if git's aliases allowed
>    pipes, it could be done instantly.

It can be done without pipes: "git cat-file -p REV:file". You can use aliases to have shorter name for that.

Show 16 quoted lines
>  - svn checkout: the output from git-clone is unfriendly.
>    -------------------
>    remote: Generating pack...
>    remote: Done counting 6 objects.
>    remote: Deltifying 6 objects.
>    remote:  100% (6/6) done
>    Indexing 6 objects.
>    remote: Total 6, written 6 (delta 0), reused 0 (delta 0)
>     100% (6/6) done
>    -------------------
>    What are "objects"?  What is deltifying?  Why does object count
>    matter to me?  What is indexing?  How much data was transferred?  How
>    long did it take?  How big is my local clone?
>    
>    While transferring: how long is it going to take to finish?  How much
>    data is there to transfer in total?

Hmmm... I thought that some progress indicator of download/upload was added... guess I was wrong.

-- 
Jakub Narebski
Warsaw, Poland
ShadeHawk on #git
Previous: Jakub NarebskiNext: Andy Parkins
Message 7 of 43 in “svn versus git”
  1. Andy ParkinsDec 13, 2006
  2. J. Bruce FieldsDec 13, 2006
  3. Document the simple way of using of git-cat-fileRobin Rosenberg, Dec 13, 2006
  4. Jakub NarebskiDec 13, 2006
  5. Johannes SchindelinDec 14, 2006
  6. Jakub NarebskiDec 14, 2006
  7. Jakub NarebskiDec 13, 2006
  8. Andy ParkinsDec 13, 2006
  9. Jakub NarebskiDec 13, 2006
  10. Shawn PearceDec 13, 2006
  11. Peter BaumannDec 13, 2006
  12. Shawn PearceDec 13, 2006
  13. Jakub NarebskiDec 13, 2006
  14. Shawn PearceDec 13, 2006
  15. Andy ParkinsDec 14, 2006
  16. Junio C HamanoDec 14, 2006
  17. Andy ParkinsDec 14, 2006
  18. Nguyen Thai Ngoc DuyDec 14, 2006
  19. Johannes SchindelinDec 14, 2006
  20. Nguyen Thai Ngoc DuyDec 14, 2006
  21. Johannes SchindelinDec 14, 2006
  22. Nguyen Thai Ngoc DuyDec 14, 2006
  23. Johannes SchindelinDec 15, 2006
  24. Nguyen Thai Ngoc DuyDec 15, 2006
  25. Johannes SchindelinDec 15, 2006
  26. Johannes SchindelinDec 15, 2006
  27. Junio C HamanoDec 15, 2006
  28. Nicolas PitreDec 15, 2006
  29. Nguyen Thai Ngoc DuyDec 16, 2006
  30. Jakub NarebskiDec 15, 2006
  31. Andy ParkinsDec 15, 2006
  32. Seth FalconDec 14, 2006
  33. Jakub NarebskiDec 15, 2006
  34. Robin RosenbergDec 13, 2006
  35. Junio C HamanoDec 13, 2006
  36. Andy ParkinsDec 14, 2006
  37. Arkadiusz MiskiewiczDec 14, 2006
  38. Andreas EricssonDec 14, 2006
  39. Arkadiusz MiskiewiczDec 14, 2006
  40. Shawn PearceDec 14, 2006
  41. Andreas EricssonDec 15, 2006
  42. Johannes SchindelinDec 14, 2006
  43. Jakub NarebskiDec 15, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.