Subversion:从云 SVN 存储库迁移到本地 SVN 存储库...丢失历史记录?
我在本地创建了自己的 SVN 存储库。然后使用:
svnsync init DEST SRC
svnsync sync DEST
svnsync checkout DEST
结帐成功,我从原始 SVN 存储库中获取了所有文件,这绝对是一件好事!
但是当我这样做时:
svn log
我收到的只是消息:
svn: Item is not readable
该文件没有任何历史记录吗?
我是否错误地迁移了 SVN 存储库?
我按照我认为最好的说明进行操作我可以...
ps FWIW 这是我以 bash shell 脚本的形式执行的命令:
#!/bin/bash
#===============================================================================
#= Function: Script to migrate an old svn repository to a new svn repository
#= Purpose: The process is kinda tricky... need to write it down to prevent
#= reinventing the wheel
#===============================================================================
# User input parameters for this script
DEFAULT_REPO_PATH = "srv/svn/repos";
NEW_REPO_NAME = "name";
SRC_REPOSITORY_URL = "https://example.googlecode.com/svn";
# Create the folder for all your svn repositories before creating the repository
sudo mkdir --parents /$(DEFAULT_REPO_PATH)/$(NEW_REPO_NAME)/
# Create the new repository
sudo svnadmin create /$(DEFAULT_REPO_PATH)/$(NEW_REPO_NAME)/
# -- The new repository is not ready for receiving the old repository.
# -- There are a number of actions that need to be completed before you can
# load the old repository onto the new repository.
# 1.) Setup the pre-revprop-change hook
cd /$(DEFAULT_REPO_PATH)/$(NEW_REPO_NAME)/hooks/
sudo touch pre-revprop-change
sudo chmod +x pre-revprop-change
# 2.) Eventually we are calling svnsync init $(SRC_URL) $(SRC_URL) but
# the new repository is not accessible via any URL because there is
# no server setup
#
# Example URLS:
# -- svn://$(SERVER)/$(SRC_REPO_NAME)
# -- ssh+svn://$(SERVER)/$(SRC_REPO_NAME)
# -- https://$(SERVER)/$(SRC_REPO_NAME)
#
# To make the new repository accesible via URL I will setup an svn
# server using the built in "svnserve" command.
#
# Svnserve command line switches:
# -d, --daemon
# Causes svnserve to run in daemon mode. svnserve backgrounds
# itself and accepts and serves TCP/IP connections on the svn port
# (3690, by default).
# -r root, --root=root
# Sets the virtual root for repositories served by svnserve. The
# pathname in URLs provided by the client will be interpreted rela‐
# tive to this root, and will not be allowed to escape this root.
svnserve -d -r /$(DEFAULT_REPO_PATH)/
# 3.) Almost ready, the last step is to give write permission to the new repository
#
# By default a new repository is read only.
#
# 3.1) To give write permission you have to edit both the
# 3.2) "svnserve.conf" and
# 3.3) "passwd" file
# /$(DEFAULT_REPO_PATH)/$(NEW_REPO_NAME)/conf/svnserve.conf file
sudo vim /$(DEFAULT_REPO_PATH)/$(NEW_REPO_NAME)/conf/svnserve.conf
# 3.4) uncomment: "anon-access = read"
# 3.5) uncomment: "auth-access = write"
# 3.6) uncomment: "authz-db = authz"
sudo vim /$(DEFAULT_REPO_PATH)/$(NEW_REPO_NAME)/conf/passwd
# 3.9) add a line for the new authorized user
# "
# $(USER1) = $(USER1_PASSWD)
# "
# 3.10) add a line for the authorization permissions
# (groups... like anonymous or authorized get... or set up
# specific permissions for specific users or groups)
# "
# [/]
# $authenticated = rw
# "
# 3.11) You have to enable the new svnserve settings by restarting the svn
# server. To do this you "kill" the svn server.
sudo kill $(PID_OF_SVNSERVE)
# 3.12) Restart the svn server by calling svnserve again
svnserve -d -r /$(DEFAULT_REPO_PATH)/
# 4.) Synchronize the new repository with the old repository
# NOTE: It took about 0.5 seconds for each revision... I only had about
sudo svnsync init svn://$(DEFAULT_REPO_PATH)/$(NEW_REPO_NAME) $(SRC_REPOSITORY_URL)
sudo svnsync sync svn://$(DEFAULT_REPO_PATH)/$(NEW_REPO_NAME)
I created my own SVN repo locally. Then used:
svnsync init DEST SRC
svnsync sync DEST
svnsync checkout DEST
The checkout worked successfully and I got all the files from the original SVN repo and that is definitely a good thing!
But when I did:
svn log
All I get is the message:
svn: Item is not readable
Does the file not have any history?
Did I migrate the SVN repo incorrectly?
I followed the instructions I found as best as I could...
p.s. FWIW here is the commands I executed in the form of a bash shell script:
#!/bin/bash
#===============================================================================
#= Function: Script to migrate an old svn repository to a new svn repository
#= Purpose: The process is kinda tricky... need to write it down to prevent
#= reinventing the wheel
#===============================================================================
# User input parameters for this script
DEFAULT_REPO_PATH = "srv/svn/repos";
NEW_REPO_NAME = "name";
SRC_REPOSITORY_URL = "https://example.googlecode.com/svn";
# Create the folder for all your svn repositories before creating the repository
sudo mkdir --parents /$(DEFAULT_REPO_PATH)/$(NEW_REPO_NAME)/
# Create the new repository
sudo svnadmin create /$(DEFAULT_REPO_PATH)/$(NEW_REPO_NAME)/
# -- The new repository is not ready for receiving the old repository.
# -- There are a number of actions that need to be completed before you can
# load the old repository onto the new repository.
# 1.) Setup the pre-revprop-change hook
cd /$(DEFAULT_REPO_PATH)/$(NEW_REPO_NAME)/hooks/
sudo touch pre-revprop-change
sudo chmod +x pre-revprop-change
# 2.) Eventually we are calling svnsync init $(SRC_URL) $(SRC_URL) but
# the new repository is not accessible via any URL because there is
# no server setup
#
# Example URLS:
# -- svn://$(SERVER)/$(SRC_REPO_NAME)
# -- ssh+svn://$(SERVER)/$(SRC_REPO_NAME)
# -- https://$(SERVER)/$(SRC_REPO_NAME)
#
# To make the new repository accesible via URL I will setup an svn
# server using the built in "svnserve" command.
#
# Svnserve command line switches:
# -d, --daemon
# Causes svnserve to run in daemon mode. svnserve backgrounds
# itself and accepts and serves TCP/IP connections on the svn port
# (3690, by default).
# -r root, --root=root
# Sets the virtual root for repositories served by svnserve. The
# pathname in URLs provided by the client will be interpreted rela‐
# tive to this root, and will not be allowed to escape this root.
svnserve -d -r /$(DEFAULT_REPO_PATH)/
# 3.) Almost ready, the last step is to give write permission to the new repository
#
# By default a new repository is read only.
#
# 3.1) To give write permission you have to edit both the
# 3.2) "svnserve.conf" and
# 3.3) "passwd" file
# /$(DEFAULT_REPO_PATH)/$(NEW_REPO_NAME)/conf/svnserve.conf file
sudo vim /$(DEFAULT_REPO_PATH)/$(NEW_REPO_NAME)/conf/svnserve.conf
# 3.4) uncomment: "anon-access = read"
# 3.5) uncomment: "auth-access = write"
# 3.6) uncomment: "authz-db = authz"
sudo vim /$(DEFAULT_REPO_PATH)/$(NEW_REPO_NAME)/conf/passwd
# 3.9) add a line for the new authorized user
# "
# $(USER1) = $(USER1_PASSWD)
# "
# 3.10) add a line for the authorization permissions
# (groups... like anonymous or authorized get... or set up
# specific permissions for specific users or groups)
# "
# [/]
# $authenticated = rw
# "
# 3.11) You have to enable the new svnserve settings by restarting the svn
# server. To do this you "kill" the svn server.
sudo kill $(PID_OF_SVNSERVE)
# 3.12) Restart the svn server by calling svnserve again
svnserve -d -r /$(DEFAULT_REPO_PATH)/
# 4.) Synchronize the new repository with the old repository
# NOTE: It took about 0.5 seconds for each revision... I only had about
sudo svnsync init svn://$(DEFAULT_REPO_PATH)/$(NEW_REPO_NAME) $(SRC_REPOSITORY_URL)
sudo svnsync sync svn://$(DEFAULT_REPO_PATH)/$(NEW_REPO_NAME)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
对于 SVN 日志问题:您的配置错误(或者 Subversion 有错误:))。
无论如何,它可以通过更改“svnserve.conf”文件中的行来修复:
另一种解决方案仅更改“auzh”文件中的行:
该解决方案是匿名读取您的存储库,这不好。
如果您只需要使用授权存储库,则使用第一个解决方案。 (用 svn 1.6.17 进行了测试,但认为它不依赖于版本)
for SVN log trouble: You have bad configuration (or Subversion has a bug:)).
Anyway it can be fixed by changing in "svnserve.conf" file the line:
Another solution to change only "auzh" file the line:
That solution is given anonymous reads your repository that is not good.
If you need to use only authorization repository than use the first solution. (was tested with svn 1.6.17, but think it does not depend from version)
您是否设置/迁移了权限设置?
Did you set up/migrate the permission settings?