git svn - <file> was not found in commit <hash>

In the middle of pulling down a (rather large) svn repo with git-svn, I encountered the following error message (generic info substituted for real info):

Found possible branch point: svn://server/project/trunk/dir => svn://server/project/branches/branchname, <revision>
Initializing parent: refs/remotes/branchname@<revision>
project/trunk/dir/file was not found in commit <hash> (r<revision>)

I have read in other posts that it is possible to "un-fetch" this info through some tinkering. However, I would rather not lose the history and go forward as painlessly as possible.

How can I get git-svn fetch to continue?

This probably means that you are receiving a new svn revision which modifies a file which (for some reason) does not exist in your git commit equivalent of the parent svn revision. One very easy way to cause this is to be inconsistent with --ignore-paths (originally there was no way to configure those and they had to be entered on every git-svn command line that might fetch). Another way is for someone on the svn server end to change repository permissions in such a way that a whole subtree of files suddenly appears (from your perspective) that your git repository has no history for.

The easiest way to get past this immediate problem and continue git-svn fetch is to use --ignore-paths (or better the svn-remote.svn.ignore-paths config entry) to ignore the problem part of the tree. You can get away with the command line argument to pass a single revision and you won't hit the problem again until someone modifies it on the svn side.

If you want to recover without --ignore-paths then you will need to fix the parent revision so that it includes the file being modified. I wrote git-svn reset specifically to do the "un-fetch" you refer to with less tinkering. It can reset your svn remote back to where the file was really created so you can integrate it into your history. This won't wipe out your working copies, but you will need to reparent any working branches on this new history.

Git and Subversion, git-svn is a git command that allows using git to interact with Subversion repositories.git-svn is part of git, meaning that is NOT a plugin but actually bundled with� There are several ways to migrate from SVN to Git. The approach outlined in this article is based on using git-svn, a Git extension, which can be used to check out a Subversion repository to a local Git repository and then push changes from the local Git repository back to the Subversion repository.

I got this error from git svn fetch when the repository had svn:externals urls set, and my --ignore-paths regexp would filter them out.

A simple guide to git-svn � GitHub, The git svn clone command transforms the trunk, branches, and tags in your SVN repository into a new Git repository. Depending on the structure of your SVN repo � With git-svn, you can create a Git clone from any Subversion repository, make changes, and commit those changes back to SVN without anyone knowing that you did not use a pure SVN client.

A quick solution here is to reset to a revision fairly before problematic one.

git svn reset <a past revision>

For example, when an error message mentions r1000 e.g. run git svn reset r990, etc.

And run git svn rebase or git svn fetch.

Convert, Initializes the git-svn repository corresponding to a remote subversion repository with the standard layout. git svn init <svn-repo-url> --stdlayout --prefix=origin/. Perhaps the most inarguable advantage SVN has over Git is in how it handles binary files. The reason for this superiority is the support Subversion provides for the Lock-Modify-Unlock model. It is implemented in SVN using a lock command (svn:needs-lock property) while Git offers no exclusive file locking at all due to its distributed nature.

I ran into this problem with directory names containing unicode characters, even though the error complains about a specific file in the directory. I tried

git svn fetch --ignore-paths path/up/to/filename

with the full path of the file, but that didn't work. Nor did trying the full path of directory with the unicode characters.

The command that finally worked was with the parent directory of the directory with unicode characters, like so:

git svn fetch --ignore-paths path/up/to/but-not-including-unicode-chars

Git Subversion Cheat Sheet, Getting the GIT checkout �. Import Straight from the SVN repo �. First, we need to fetch a copy of the repository. git svn clone -s -r 40000:HEAD� The difference between Git and SVN version control systems is that Git is a distributed version control system, whereas SVN is a centralized version control system. Git uses multiple repositories including a centralized repository and server, as well as some local repositories. SVN does not have a centralized repository or server.

For newer MacOSX systems configure

git config --global core.precomposeunicode false

, for older ones true. It is explained here:

https://michael-kuehnel.de/git/2014/11/21/git-mac-osx-and-german-umlaute.html

After setting the config option correctly I was able to import a SVN repository using svn2git (which uses git svn under the hood).

I also had

$ locale
LANG="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_CTYPE="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_ALL="de_DE.UTF-8"

But I doubt that makes much of a difference.

git-svn-tutorial – Parrot, With git-svn, you can create a Git clone from any Subversion repository, make changes, and commit those changes back to SVN without anyone knowing that� SVN is a revision control and software versioning system.  Git is an SCM with its main emphasis being on speed. It was developed for Linux kernel by Linus Torvalds. It has a repository with revision tracking capacities and complete history.

An Introduction to git-svn, git svn is a simple conduit for changesets between Subversion and git. It provides a bidirectional flow of changes between a Subversion and a git repository. While git is amazing, Subversion still has its good qualities, and makes an excellent centralized repository, especially with its ecosystem of user-friendly tools. The integration between git and Subversion (git-svn) is so well done that several of us have been using git as our interface to all our Subversion repositories.

git-svn(1), Comparison table of Git-Subversion commands Command Operation Subversion git clone Copy a repository svn checkout git commit Record changes to file� The sizes of Subversion and Git repositories are pretty the same: 186MB in Subversion (35599 revisions) vs. 169 MB in Git (32647 revisions). Git repository is only 17 MB less than the corresponding Subversion repository, however it has less revisions as well (35599 in Subversion vs. 32647 in Git).

Git vs SVN commands, In a nutshell, git-svn is a git command that allows using git to interact with Subversion repositories. git-svn is part of git, meaning that is NOT a� Migrate your development efforts from SVN to Git. The prepare, convert, and synchronize steps take a SVN commit history and turn it into a Git repository. The best way to manage these first 3 steps is to designate one of your team members as the migration lead (if you’re reading this guide, that person is probably you).

Comments
  • This answer worked for me: stackoverflow.com/questions/2105064/… - do a git svn reset -r <previous> and then git svn fetch
  • This happened to me when I ran git svn dcommit just as somebody else committed to SVN. git got very confused when doing the rebase and created a commit object with a tree that only contained the file which had been modified by my local commit, so it looked like entire contents of my working directory had disappeared. I was able to use git svn reset to refetch the bogus revision.
  • I ran into this because I had a file with an umlaut. Fortunately only a single file, so I use the svn-remote.svn.ignore-paths config entry like you suggested to ignore this single file and it worked.
  • @CodeStage: an alternative approach to solving the umlaut problem without simply ignoring that part of the tree, is this answer.
  • "Another way is for someone on the svn server end to change repository permissions in such a way that a whole subtree of files suddenly appears (from your perspective) that your git repository has no history for." I had this happen to me, now I don't know how to do " fix the parent revision so that it includes the file being modified. " this part.
  • @themagicalyang Look at the documentation for "git svn reset"
  • Thanks a lot, this helped. Very useful if you don't want to start ignoring multiple problematic paths!