From: Jakub Narebski <jnareb@gmail.com>
To: git@vger.kernel.org
Subject: Re: svn versus git
Date: Wed, 13 Dec 2006 23:29:16 +0100 [thread overview]
Message-ID: <elpun9$qp1$1@sea.gmane.org> (raw)
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'"?
> 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.
> 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.
> 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.
> 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>".
> 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.
> - 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
next prev parent reply other threads:[~2006-12-13 22:27 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-12-13 22:00 svn versus git Andy Parkins
2006-12-13 22:18 ` J. Bruce Fields
2006-12-13 23:20 ` [PATCH] Document the simple way of using of git-cat-file Robin Rosenberg
2006-12-13 23:55 ` Jakub Narebski
2006-12-14 0:29 ` Johannes Schindelin
2006-12-14 0:35 ` Jakub Narebski
2006-12-13 22:29 ` Jakub Narebski [this message]
2006-12-13 22:51 ` svn versus git Andy Parkins
2006-12-13 23:14 ` Jakub Narebski
2006-12-13 23:17 ` Shawn Pearce
2006-12-13 23:32 ` Peter Baumann
2006-12-13 22:56 ` Shawn Pearce
2006-12-13 23:17 ` Jakub Narebski
2006-12-13 23:26 ` Shawn Pearce
2006-12-14 9:08 ` Andy Parkins
2006-12-14 9:44 ` Junio C Hamano
2006-12-14 10:42 ` Andy Parkins
2006-12-14 15:08 ` Nguyen Thai Ngoc Duy
2006-12-14 15:31 ` Johannes Schindelin
2006-12-14 16:32 ` Nguyen Thai Ngoc Duy
2006-12-14 16:55 ` Johannes Schindelin
2006-12-14 17:10 ` Nguyen Thai Ngoc Duy
2006-12-15 0:19 ` Johannes Schindelin
2006-12-15 15:26 ` Nguyen Thai Ngoc Duy
2006-12-15 20:15 ` Johannes Schindelin
2006-12-15 20:19 ` Johannes Schindelin
2006-12-15 21:55 ` Junio C Hamano
2006-12-15 22:37 ` Nicolas Pitre
2006-12-16 0:26 ` Nguyen Thai Ngoc Duy
2006-12-15 11:27 ` Jakub Narebski
2006-12-15 12:08 ` Andy Parkins
2006-12-15 15:19 ` Horst H. von Brand
2006-12-15 15:41 ` Andreas Ericsson
2006-12-15 18:14 ` Junio C Hamano
2006-12-14 15:55 ` Seth Falcon
2006-12-15 11:35 ` Jakub Narebski
2006-12-13 23:24 ` Robin Rosenberg
2006-12-13 23:45 ` Junio C Hamano
2006-12-14 9:19 ` Andy Parkins
2006-12-14 19:00 ` Arkadiusz Miskiewicz
2006-12-14 22:07 ` Andreas Ericsson
2006-12-14 22:13 ` Arkadiusz Miskiewicz
2006-12-14 22:23 ` Shawn Pearce
2006-12-15 8:52 ` Andreas Ericsson
2006-12-14 23:10 ` Johannes Schindelin
2006-12-15 12:56 ` Jakub Narebski
2006-12-15 0:58 ` Horst H. von Brand
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='elpun9$qp1$1@sea.gmane.org' \
--to=jnareb@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.