public static DAVProperties findStartingProperties(DAVConnection connection, DAVRepository repos, String fullPath) throws SVNException {
		DAVProperties props = null;
		String originalPath = fullPath;
		String loppedPath = "";
		if ("".equals(fullPath)) {
			props = getStartingProperties(connection, fullPath, null);
			if (props != null) {
				if (props.getPropertyValue(DAVElement.REPOSITORY_UUID) != null && repos != null) {
					repos.setRepositoryUUID(props.getPropertyValue(DAVElement.REPOSITORY_UUID).getString());
				}
				props.setLoppedPath(loppedPath);
			}
			return props;
		}

		while(!"".equals(fullPath)) {
			SVNErrorMessage err = null;
			SVNException nested=null;
			try {
				props = getStartingProperties(connection, fullPath, null);
			} catch (SVNException e) {
				if (e.getErrorMessage() == null) {
					throw e;
				}
				err = e.getErrorMessage();
			}
			if (err == null) {
				break;
			}
			if (err.getErrorCode() != SVNErrorCode.FS_NOT_FOUND) {
				SVNErrorManager.error(err, SVNLogType.NETWORK);
			}
			loppedPath = SVNPathUtil.append(SVNPathUtil.tail(fullPath), loppedPath);
			int length = fullPath.length();
			fullPath = SVNPathUtil.removeTail(fullPath);
			// will return "" for "/dir", hack it here, to make sure we're not missing root.
			// we assume full path always starts with "/".
			if (length > 1 && "".equals(fullPath)) {
				fullPath = "/";
			}
			if (length == fullPath.length()) {
				SVNErrorMessage err2 = SVNErrorMessage.create(err.getErrorCode(), "The path was not part of repository");
				SVNErrorManager.error(err2, err, nested, SVNLogType.NETWORK);
			}
		}
		if ("".equals(fullPath)) {
			SVNErrorMessage err = SVNErrorMessage.create(SVNErrorCode.RA_ILLEGAL_URL, "No part of path ''{0}'' was found in repository HEAD", originalPath);
			SVNErrorManager.error(err, SVNLogType.NETWORK);
		}
		if (props != null) {
			if (props.getPropertyValue(DAVElement.REPOSITORY_UUID) != null && repos != null) {
				repos.setRepositoryUUID(props.getPropertyValue(DAVElement.REPOSITORY_UUID).getString());
			}
			if (props.getPropertyValue(DAVElement.BASELINE_RELATIVE_PATH) != null && repos != null) {
				String relativePath = props.getPropertyValue(DAVElement.BASELINE_RELATIVE_PATH).getString();
				relativePath = SVNEncodingUtil.uriEncode(syncRelativePathWithFullPath(fullPath, relativePath));
				String rootPath = fullPath.substring(0, fullPath.length() - relativePath.length());
				repos.setRepositoryRoot(repos.getLocation().setPath(rootPath, true));
			}
			props.setLoppedPath(loppedPath);
		}

		return props;
	}
Handle different branch concept in svn and github.

@since 3.5.0
ngrinder-controller/src/main/java/org/tmatesoft/svn/core/internal/io/dav/DAVUtil.java