我在我的个人电脑上有一个本地svn代码仓库,我一直在用它来进行业余项目开发,这些文件不打算对其他人开放,所以我将密码等信息直接存储在其中。
现在,我想要将代码仓库共享给其他人使用,但是又不想让他们看到这些密码等私密信息。
是否有方法可以遍历整个代码仓库,并将所有的密码和账户数据替换为类似 "xxxxxxxxxx" 的文本?
我在我的个人电脑上有一个本地svn代码仓库,我一直在用它来进行业余项目开发,这些文件不打算对其他人开放,所以我将密码等信息直接存储在其中。
现在,我想要将代码仓库共享给其他人使用,但是又不想让他们看到这些密码等私密信息。
是否有方法可以遍历整个代码仓库,并将所有的密码和账户数据替换为类似 "xxxxxxxxxx" 的文本?
svnadmin dump > mysvn
您将获得一个扁平化的文件,其中包含存储库中所有修订版的所有数据。从那里开始,您应该能够手动编辑文件(如果您的存储库相当大,则可能需要行编辑器,如pico、nano、vi等)。
最后,您将重新加载此转储到新存储库中。这将保留您的项目历史记录。
svnadmin load /path/to/new/repo < mysvn
在任何需要接受审计等程序的公司环境中,这种做法都会被视为不可取,但对于一个业余项目来说,可能会奏效。
编辑:我曾经试图将两个不同的代码库合并在一起,因此需要向平面文件中添加一个新的“目录节点”。我不确定 SVN 是否会哈希文件或更改以确定是否被篡改。
svnadmin dump repo > svn.dump
执行,然后找到需要编辑的文件版本。导出这些文件 (svn export file@r1234 file.1234
)。将导出的文件复制到 file.1234.modified
。用 x
覆盖密码,使其大小相同。获取新的 md5sum 和 sha1sum (md5sum file.*; sha1sum file.*
)。在 vim 中打开 svn.dump
并搜索修改前的 md5sum。像修改过的文件一样精确地覆盖密码,并更新 md5sum 和 sha1sum。然后执行 mv repo repo.bak && svnadmin load repo < svn.dump
。 - dannysauer首先创建一个本地仓库,在这个仓库中你将下载googlecode的仓库:
svnadmin create /tmp/your_local_repo
#!/bin/bash
exit 0
使其可执行:
chmod +x /tmp/isd_gc/hooks/pre-revprop-change
如果你在这一步失败了,你很可能会看到一个错误: Revprop change blocked by pre-revprop-change hook (exit code 255) with no output。
现在你可以从code.google.com初始化svn同步。
svnsync init --username yourname@youremail file:///tmp/your_local_repo https://yourproject.googlecode.com/svn
并开始下载所有历史记录:
svnsync sync --username yourname@youremail file:///tmp/your_local_repo
提交版本 1。
复制版本 1 的属性。
正在传输文件数据...........................
复制版本 87 的属性。
现在我们创建一个转储文件,它将被提供给 svndumpfilter 以删除不必要的文件。
svnadmin dump . > /tmp/tst_dump_gc.dmp
使用 svndumpfilter 从中删除第一个不需要的文件。
svndumpfilter exclude /trunk/unwanted file_1.jsvg < /tmp/tst_dump_gc.dmp > /tmp/tst_dump_clean1.dmp
删除了1个节点:
'/trunk/unwanted file_new.jsvg'
移除第二个不需要的文件:
svndumpfilter exclude /trunk/unwanted file_2.jsvg < /tmp/tst_dump_clean1.dmp > /tmp/tst_dump_clean2.dmp
rm -rf /tmp/your_local_repo
svnadmin create /tmp/your_local_repo
将过滤后的转储文件加载到存储库中
[/tmp]$svnadmin load --ignore-uuid your_local_repo < /tmp/tst_dump_clean2.dmp
检查svn客户端是否正常运行(在我的svn客户端上,仅对主干进行历史检查只显示前25个结果)。
svnsync sync --username yourname@youremail https://yourproject.googlecode.com/svn
最简单的方法是查看存储库的内容,删除所有敏感信息,将工作目录导入新的存储库,并使其对公众可用。很可能使用您的项目的人会对其当前状态感兴趣,而不是变更历史记录。
svnadmin dump
存储库,然后通过svndumpfilter
(排除错误路径)将转储文件传输到svnadmin load
命令中是什么意思?链接中也没有提供详细信息。 - Hunsu