{ "info": { "author": "Tom Lazar", "author_email": "tom@tomster.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Topic :: Software Development :: Version Control" ], "description": "git-svn-helpers is a collection of command line tools that greatly simplify\nusing git for svn repositories.\n\nIts main goal is to make setting up a local git repository following an\nexisting svn checkout a 'no-brainer'.\n\nIt also addresses using a single git-svn repository for working on multiple\ncheckouts of (usually) different branches and switching between them.\n\nBasic usage\n===========\n\nExecutive summary::\n\n > cd path/to/svn/repo\n > gitify init\n\nPerform local changes and commit them to git. When ready to push your changes::\n\n > gitify push\n\nTo update your working directory with upstream changes::\n\n > gitify update\n\ngitify will take care to keep your git and svn repository in sync and do its best to avoid conflicts when updating.\n\nSample session\n==============\n\nHere's a sample session::\n\n > cd /tmp\n > svn co https://svn.plone.org/svn/plone/plone.app.form/branches/1.1 plone.app.form\n A 1.1/setup.py\n ...\n Checked out revision 27228.\n > cd plone.app.form\n > gitify init\n No git repository found in /Users/tomster/.gitcache/.\n Initiating cloning into cache.\n Analyzing svn log...\n Cloning https://svn.plone.org/svn/plone/plone.app.form/ from r10593:34543 into /Users/tomster/.gitcache/\n Initialized empty Git repository in /Users/tomster/Development/gitcache/plone.app.form/.git/\n ...\n Git branch 'local/1.1' is now following svn branch '1.1':\n # On branch local/1.1\n nothing to commit (working directory clean)\n > git branch\n * local/1.1\n master\n\nPoints to note:\n\n * gitify limited the cloning to the revisions found in the svn log of the package root (here ``https://svn.plone.org/svn/plone/plone.app.form/``). A big time saver, especially on large repositories (such as plone.collective)\n * gitify created a local branch ``local/1.1`` that follows the (remote) svn branch ``1.1`` and switched to it\n * gitify assumed that the name of the package is the name of the directory it \n was called from (in this case ``plone.app.form``) as it refuses to guess\n\nMultiple check-outs of the same package\n=======================================\n\nIn practice you will often work with different local copies of a given repository, i.e. on trunk and on a feature branch. That's when the ``.gitcache`` directory created above comes in handy. Let's move our previous checkout out of the way and create a maintenance checkout that follows trunk::\n\n > cd ..\n > mkdir feature-branch\n > mv plone.app.form feature-branch/\n > mkdir maintenance\n > cd maintenance/\n > svn co https://svn.plone.org/svn/plone/plone.app.form/trunk plone.app.form\n A plone.app.form/setup.py\n ...\n U plone.app.form\n Checked out revision 27228.\n\nWhat happens if we run gitify here?::\n\n > cd plone.app.form/\n > gitify init\n Updating existing cache:\n fetching /Users/tomster/.gitcache/plone.app.form\n Done. 1 packages updated.\n Git branch 'local/trunk' is now following svn branch 'trunk':\n # On branch local/trunk\n nothing to commit (working directory clean)\n\nNotice, that this operation went much faster, as we now have used the existing git repository in the cache directory, thus avoiding the slow and network intensive clone operation.\n\nThis can be further evidenced by looking at the available local branches now. Notice how the git repository contains both trunk and the 1.1 branch::\n\n > git branch\n local/1.1\n * local/trunk\n master\n\nSwitching branches\n==================\n\nIf the svn repository switches to another branch (i.e. due to a change in svn:externals or in a buildout source) the branch git is on differs from the current svn branch. To remedy this you can either manually switch git or just re-run ``gitify init``::\n\n > svn info\n URL: https://svn.plone.org/svn/plone/plone.app.form/trunk\n\n > git branch\n local/1.1\n * local/trunk\n master\n\nIf we switch the svn branch, git initially doesn't catch the change and the branches differ::\n\n > svn switch https://svn.plone.org/svn/plone/plone.app.form/branches/1.1\n > svn info\n URL: https://svn.plone.org/svn/plone/plone.app.form/branches/1.1\n\n > git branch\n local/1.1\n * local/trunk\n master\n\nAfter re-running ``gitify init`` they are the same again::\n\n > git branch\n * local/1.1\n local/trunk\n master\n\nKeeping the cache up-to-date\n============================\n\nOf course, once you introduce a cache you need to keep it up-to-date. ``git-svn``\nprovides the ``fetch`` command for this purpose. In practice it is cumbersome\nto update each package manually, though. Therefore we provide our own ``fetch``\ncommand which can update multiple packages at once using wildcards, like so::\n\n > gitify fetch plone*\n fetching /Users/tomster/.gitcache/plone.app.form\n fetching /Users/tomster/.gitcache/plone.pony\n fetching /Users/tomster/.gitcache/plonenext\n Done. 3 packages updated.\n\nYou can pass the ``-v`` option to see the output of the ``git-svn fetch`` commands.\nIf you don't provide a package *all* packages will be updated. \n\nNote, that the our fetch command never touches any working copy, only the cache. \nIs primarily intended to be run as a maintenance command, i.e. via crontab to keep\nthe local cache 'fresh'.\n\n\nKeeping git and svn in sync\n===========================\n\nSince the local filesystem is both a git repository, as well as a svn check-\nout *at the same time* (IOW we have both ``.git`` and ``.svn`` floating\naround) they should be kept in sync as closely as possible. By design, this\ncan only happen, when we have online access to the svn repository. Therefore\nit is best performed when committing back to svn. The way this is achieved\nmanually is to first dcommit and then perform a ``svn up --force`` command\n(the ``--force`` is necessary so that svn won't be bothered by any new files\nthat have been committed). ``gitify push`` provides a convenience command that\nperforms this for you::\n\n > gitify push -v\n Committing to https://svn.plone.org/svn/plone/plone.app.form/branches/1.1 ...\n At revision 27229.\n INFO: Pushed local changes to svn.\n > svn st\n \n\nInstallation\n============\n\nSimply use `easy_install `_,\noptionally with `virtualenv `_::\n\n > easy_install git-svn-helpers\n\nRequirements\n============\n\n``git-svn-helpers`` requires that git (with subversion support a.k.a\n``git-svn``) is already installed.\n\n\nTODO\n====\n\n * add support for custom svn layout\n\nChange history\n**************\n\n0.9 - 2012-03-11\n----------------\n\n* The cannonical repository is now in https://github.com/collective.\n [rossp]\n\n* Fix the handling when switching to a svn branch that git already has\n a local branch for.\n [rossp]\n\n0.8 - 2010-03-10\n----------------\n\n* Make the init command follow along if the svn repository has been switched\n to another branch. Thanks to Calvin Hendryx-Parker for reporting the issue.\n [tomster]\n\n0.7 - 2010-03-07\n----------------\n\n* Use full copies instead of symlinks to create working copies. This avoids\n the issue of having the git and svn repository out of sync when working\n with multiple copies of the same repository and greatly reduces the risk of\n conflicts.\n\n This also means, that the fetch command now only operates on the cache \n without modifying the working copy (making it safe to run via crontab,\n for example)\n\n Running gitify against an old-style working copy will produce an error.\n Simply deleting the symlink and re-running gitify remedies that, however.\n\n Another effect, is that the init command is now only needed once for each\n working copy (it is no longer necessary to re-run the command after\n switching between different working copies of the same repository).\n \n gitify therefore no longer defaults to the init command (just as neither\n git nor svn do anything w/o supplying an explicit action). Also, it has been\n renamed from ``gitify`` (back) to ``init``.\n [tomster]\n\n* Allow the ``help``, ``--version`` and ``fetch`` commands to run outside .svn directories\n [tomster]\n\n0.6 - 2010-03-07\n----------------\n\n* add a file manifest so that all necessary files will get included for sdist\n [proyvind]\n\n* sample update hook for enforcing dcommits to help keeping the svn and git \n repositories in sync\n [chaoflow]\n\n* updated tests to work with git 1.6.x\n [tomster]\n\n* removed deprecated entry points for clone, fetch and commit\n [tomster]\n\n0.5 - 2009-08-15 (a.k.a. HAR2009 release)\n-----------------------------------------\n\n* Added ``gitify update`` command, which performs a git-svn rebase operation\n for the current svn checkout but also handles uncommitted local changes\n gracefully (unlike ``git svn`` but like svn does)\n\n* No longer use the logging module for user feedback. That idea was rather\n misguided :)\n\n0.4 - 2009-08-11\n----------------\n\n* Refactored the entry points to just use gitify. All other commands are now\n sub-commands of ``gitify``:\n\n * ``gs-commit`` has been replaced with ``gitify push``\n * ``gs-fetch`` has been replaced with ``gitify fetch``\n\n* Added usage and help output for each command.\n\n* Removed the ``gs-clone`` entry point as it was only ever used together with\n the main gitify command anyway.\n\n* Use proper logging instead of just printing to stdout\n\n* Added comprehensive tests, including functional tests that cover the entire\n update/commit cycle of cloning an svn repository and commiting back to it.\n\n0.3.1 - 2009-07-09\n------------------\n\n* BUGFIX: Don't use custom aliases, as they might not be installed. \n This resolves http://github.com/tomster/git-svn-helpers/issues#issue/2\n* BUGFIX: Explicitly list elementtree as dependency\n This resolves http://github.com/tomster/git-svn-helpers/issues#issue/1)\n\n0.3 - 2009-06-09\n----------------\n\n* Added the ``gs-commit`` command which helps committing back to svn and\n keeping git and svn in sync\n\n0.2b - 2009-06-05\n-----------------\n\n* Added the ``gs-fetch`` command which helps keeping the cache up-to-date\n\n\n0.1b2 - 2009-05-30\n------------------\n\n* BUGFIX: get the svn log from the package root (i.e. ``/path/to/foo``) \n instead of the locally checked out path (i.e. ``path/to/foo/branches/bar``)\n which is usually much younger than the entire package and thus we would miss\n revisions in the cloning process!\n\n\n0.1b1 - 2009-05-30\n------------------\n\n* Initial release a.k.a. \"Works for me\"\n\nDownload\n********", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/collective/git-svn-helpers", "keywords": "git svn", "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "git-svn-helpers", "package_url": "https://pypi.org/project/git-svn-helpers/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/git-svn-helpers/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://github.com/collective/git-svn-helpers" }, "release_url": "https://pypi.org/project/git-svn-helpers/0.9/", "requires_dist": null, "requires_python": null, "summary": "Command-line tools to make git-svn simple", "version": "0.9" }, "last_serial": 845338, "releases": { "0.1b1dev": [ { "comment_text": "", "digests": { "md5": "0da093d628fb202746b8af35bf56a58b", "sha256": "f69d7aec4f44945cd3350364cff9cfb62f9a78f82d23dac108f27db007611dcb" }, "downloads": -1, "filename": "git-svn-helpers-0.1b1dev.tar.gz", "has_sig": false, "md5_digest": "0da093d628fb202746b8af35bf56a58b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5636, "upload_time": "2009-05-30T22:04:12", "url": "https://files.pythonhosted.org/packages/fb/e8/ddb40e996ba479a77de6ab3731c6cf8efd4b8ef36106430db8748aa8590b/git-svn-helpers-0.1b1dev.tar.gz" } ], "0.1b2dev": [ { "comment_text": "", "digests": { "md5": "8622606e1e11715eddc0f1809cbcc56c", "sha256": "33b20dfba59259b00ffe2fde4bf6101d2d8973b8d01d288bfd95befdb6620feb" }, "downloads": -1, "filename": "git-svn-helpers-0.1b2dev.tar.gz", "has_sig": false, "md5_digest": "8622606e1e11715eddc0f1809cbcc56c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5647, "upload_time": "2009-05-30T22:57:49", "url": "https://files.pythonhosted.org/packages/22/15/c8471673ba0feb48bf68b00b0c75dc6beb6c26ed5e4493348dfe6daaa8a3/git-svn-helpers-0.1b2dev.tar.gz" } ], "0.2b": [ { "comment_text": "", "digests": { "md5": "bad6e93439ce7b3153270d94f6cfa60b", "sha256": "08ad2253e84abe9b8fd70d3e4080a20832a9b022917bec9432b0507d8e3cbdb2" }, "downloads": -1, "filename": "git-svn-helpers-0.2b.zip", "has_sig": false, "md5_digest": "bad6e93439ce7b3153270d94f6cfa60b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14167, "upload_time": "2009-06-07T00:14:04", "url": "https://files.pythonhosted.org/packages/64/be/3163e430e4f1393019934d7dd9f03a4a1132ff1fb2f099fa8374befdb3d5/git-svn-helpers-0.2b.zip" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "0e0c1897247a4a443b1c92fd248bf9d8", "sha256": "557c8f99902ee7707a8ed411b0627274894f5f5b054a691ebf22153cfcf65ecf" }, "downloads": -1, "filename": "git-svn-helpers-0.3.1.zip", "has_sig": false, "md5_digest": "0e0c1897247a4a443b1c92fd248bf9d8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15669, "upload_time": "2009-07-09T11:57:02", "url": "https://files.pythonhosted.org/packages/08/86/82f46b9c1eea8a4f5ba1c8c044c999512467952271c7ff6fe02a33881afb/git-svn-helpers-0.3.1.zip" } ], "0.3b": [ { "comment_text": "", "digests": { "md5": "0d6424f423d76fe418edc180b05d085e", "sha256": "f6229fdea1a24dcaebd96f8b4137ad0d02978fc4563b0acf1ccb640a23f25e33" }, "downloads": -1, "filename": "git-svn-helpers-0.3b.zip", "has_sig": false, "md5_digest": "0d6424f423d76fe418edc180b05d085e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15281, "upload_time": "2009-06-09T18:24:45", "url": "https://files.pythonhosted.org/packages/44/69/98665efa28b7429debbbafd53231e753a3c8b86c06ad8f62a736c73c3db8/git-svn-helpers-0.3b.zip" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "c05e864bb2ab6b7f3e63cccc9254787a", "sha256": "c4fe97fd724fd957a60d3dc2b4b1dfd52dd6c56bd0c098700f4ba0736b4210f0" }, "downloads": -1, "filename": "git-svn-helpers-0.4.zip", "has_sig": false, "md5_digest": "c05e864bb2ab6b7f3e63cccc9254787a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47468, "upload_time": "2009-08-11T14:02:50", "url": "https://files.pythonhosted.org/packages/ad/5d/c7fe7bf24365310129af6d5d9247042268b428dc2ebf282969142139c20b/git-svn-helpers-0.4.zip" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "2b40a95371993196a8df713cbc4d7d11", "sha256": "ada586a67957daae9714a6d763c8572b309d9b53cf2e3442087fb094202001ec" }, "downloads": -1, "filename": "git-svn-helpers-0.5.zip", "has_sig": false, "md5_digest": "2b40a95371993196a8df713cbc4d7d11", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50892, "upload_time": "2009-08-15T18:05:02", "url": "https://files.pythonhosted.org/packages/e5/73/df7d073ae27cfb34792090f1111b11dac3371e9ed208ab9c7975b076b413/git-svn-helpers-0.5.zip" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "7b2d396526675f275ee59844ab05694a", "sha256": "e4bb4a78fa85147b087eb11fe8b1e6c53b2043f9030b1e19a47eadd4fd02544b" }, "downloads": -1, "filename": "git-svn-helpers-0.6.zip", "has_sig": false, "md5_digest": "7b2d396526675f275ee59844ab05694a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53953, "upload_time": "2010-03-07T13:56:50", "url": "https://files.pythonhosted.org/packages/76/17/111e9fae6d347f381098471dc8f0a1920cd676d95bd57685787da8ec772a/git-svn-helpers-0.6.zip" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "0f429bcc35a4a7c4368b1f1adbfd1689", "sha256": "30ab981fdf9275008a79fc98e1c51512cfcda3d5319de25f6a453bf771802057" }, "downloads": -1, "filename": "git-svn-helpers-0.7.zip", "has_sig": false, "md5_digest": "0f429bcc35a4a7c4368b1f1adbfd1689", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55452, "upload_time": "2010-03-07T20:21:29", "url": "https://files.pythonhosted.org/packages/f6/a4/547dbadebbc2f536b42e658225ef4a2e890bee5d7ccf0c010411573b79f9/git-svn-helpers-0.7.zip" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "1eda0bce278e1e3d780d91b3f7e081e5", "sha256": "6ac0f70e0ff876d0ae0f2b1bd7fd20705496c990a27cb3ce9d1f6c21598f07fa" }, "downloads": -1, "filename": "git-svn-helpers-0.8.zip", "has_sig": false, "md5_digest": "1eda0bce278e1e3d780d91b3f7e081e5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57664, "upload_time": "2010-03-10T12:53:41", "url": "https://files.pythonhosted.org/packages/bb/e7/9b42e53679dfc2f771e52bf4f315e204ca7e171c3d8f0501591abecfccb0/git-svn-helpers-0.8.zip" } ], "0.9": [ { "comment_text": "", "digests": { "md5": "f7d1b577096dbb4004595fa81ee4d98a", "sha256": "8be63944ebe29cee0555a5da481e0fd794c2e8f3a1a89b68aa9868c4ebd7dc4c" }, "downloads": -1, "filename": "git-svn-helpers-0.9.tar.gz", "has_sig": false, "md5_digest": "f7d1b577096dbb4004595fa81ee4d98a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20336, "upload_time": "2012-03-11T20:06:37", "url": "https://files.pythonhosted.org/packages/21/31/b3c4d13f8b09f9e1a32a9a444685e63dde774540c842107495fc89767a8d/git-svn-helpers-0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f7d1b577096dbb4004595fa81ee4d98a", "sha256": "8be63944ebe29cee0555a5da481e0fd794c2e8f3a1a89b68aa9868c4ebd7dc4c" }, "downloads": -1, "filename": "git-svn-helpers-0.9.tar.gz", "has_sig": false, "md5_digest": "f7d1b577096dbb4004595fa81ee4d98a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20336, "upload_time": "2012-03-11T20:06:37", "url": "https://files.pythonhosted.org/packages/21/31/b3c4d13f8b09f9e1a32a9a444685e63dde774540c842107495fc89767a8d/git-svn-helpers-0.9.tar.gz" } ] }