git-svn - 云端在线

这是 git-svn 命令,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


git-svn - Subversion 存储库和 Git 之间的双向操作

概要


混帐 svn [选项] [参数]

商品描述


混帐 svn 是 Subversion 和 Git 之间变更集的简单管道。 它提供了一个
Subversion 和 Git 存储库之间的双向更改流。

混帐 svn 可以跟踪标准的 Subversion 存储库,遵循常见的
“主干/分支/标签”布局,带有 --stdlayout 选项。 它也可以跟随分支和
带有 -T/-t/-b 选项的任何布局中的标签(请参阅选项以 初始化 下面,还有
克隆 命令)。

一旦跟踪一个 Subversion 存储库(使用上述任何一种方法),Git 存储库
可以从 Subversion 更新 命令和 Subversion 由 Git 更新
提交 命令。

指令


初始化
使用额外的元数据目录初始化一个空的 Git 存储库 混帐 svn.
Subversion URL 可以指定为命令行参数,也可以指定为完整 URL
-T/-t/-b 的参数。 可选地,可以指定要操作的目标目录
作为第二个论点。 通常这个命令初始化当前目录。

-T , --trunk= , -t , --tags= ,
-b , --分支= , -s, --stdlayout
这些是 init 的可选命令行选项。 这些标志中的每一个都可以指向
相对存储库路径 (--tags=project/tags) 或完整 url
(--tags=https://foo.org/project/tags)。 您可以指定多个 --tags 和/或
--branches 选项,以防您的 Subversion 存储库放置标签或分支
多条路径下。 选项 --stdlayout 是设置的速记方式
trunk,tags,branches 作为相对路径,这是 Subversion 默认的。 如果有的话
其他选项中也给出了,它们优先。

--无元数据
设置 无元数据 [svn-remote] 配置中的选项。 这个选项不是
推荐,请阅读 svn.no元数据 使用前此联机帮助页的部分
这个选项。

--使用 svm-props
设置 使用 SvmProps [svn-remote] 配置中的选项。

--使用-svnsync-props
设置 使用 SvnsyncProps [svn-remote] 配置中的选项。

--rewrite-root=
设置 重写根 [svn-remote] 配置中的选项。

--rewrite-uuid=
设置 重写UUID [svn-remote] 配置中的选项。

--用户名=
对于 SVN 为(http、https 和普通 svn)处理身份验证的传输,
指定用户名。 对于其他传输(例如 svn+ssh://),您必须包括
URL 中的用户名,例如 svn+ssh://foo@svn.bar.com/项目

--前缀=
这允许您指定一个前缀,如果
指定了主干/分支/标签。 前缀不会自动包含
尾部斜杠,因此请确保在参数中包含一个斜杠,如果这是您的
想。 如果指定了 --branches/-b,则前缀必须包含尾部斜杠。
在任何情况下都强烈建议设置前缀(带有尾部斜杠),因为
您的 SVN 跟踪 refs 将位于“refs/remotes/$prefix/", is
兼容 - 吉特的 远程跟踪 文献 布局 (参考/遥控器/$遥控器/).
如果您希望跟踪共享的多个项目,设置前缀也很有用
一个公共存储库。 默认情况下,前缀设置为 起源/.

备注
在 Git v2.0 之前,默认前缀是 ""(无前缀)。 这意味着
SVN-tracking refs 被放置在“refs/remotes/*”,这与如何
Git 自己的远程跟踪参考被组织起来。 如果你还想要旧的
默认情况下,您可以通过在命令行上传递 --prefix "" 来获取它
(如果您的 Perl 的 Getopt::Long 是 < v2.37,则 --prefix="" 可能不起作用)。

--ignore-paths=
当传递给 初始化 or 克隆 此正则表达式将作为配置保留
钥匙。 看 的描述 --忽略路径.

--include-paths=
当传递给 初始化 or 克隆 此正则表达式将作为配置保留
钥匙。 看 的描述 --include-路径.

--no-最小化-url
跟踪多个目录时(使用 --stdlayout、--branches 或 --tags
选项),git svn 将尝试连接到根(或允许的最高级别)
的 Subversion 存储库。 此默认设置允许更好地跟踪历史,如果
整个项目在存储库中移动,但可能会导致问题
存在读取访问限制的存储库。 通过
--no-最小化-url 将允许 git svn 按原样接受 URL,而无需尝试
连接到更高级别的目录。 当只有一个时,此选项默认关闭
跟踪 URL/分支(这没什么好处)。


从我们正在跟踪的 Subversion 远程获取未获取的修订。 名称
$GIT_DIR/config 文件中的 [svn-remote "..."] 部分可以指定为可选
命令行参数。

如果需要,这会自动更新 rev_map(请参阅 $GIT_DIR/svn/**/.rev_map.* in
有关详细信息,请参阅下面的文件部分)。

- 当地时间
将 Git 提交时间存储在本地时区而不是 UTC。 这使得 混帐 日志
(即使没有 --date=local)显示与 svn log 在本地相同的时间
时区。

这不会干扰与您的 Subversion 存储库的互操作
克隆自,但如果您希望本地 Git 存储库能够
与其他人的本地 Git 存储库互操作,要么不要使用它
选项,或者您应该在同一本地时区使用它。

--父母
仅从当前 HEAD 的 SVN 父级获取。

--ignore-paths=
这允许您指定一个 Perl 正则表达式,它将导致跳过
从 SVN 结帐的所有匹配路径。 这 --忽略路径 选项应该匹配
(包括由于自动获取 克隆, 提交, 变基等)
在给定的存储库上。

配置密钥:svn-remote。 .ignore-paths

如果设置了 ignore-paths 配置键,并且命令行选项也是
给定,将使用两个正则表达式。

例子:

每次获取都跳过“doc *”目录

--ignore-paths="^doc"

跳过一级目录的“分支”和“标签”

--ignore-paths="^[^/]+/(?:branches|tags)"

--include-paths=
这允许您指定一个 Perl 正则表达式,它将导致包含
只匹配从 SVN 结帐的路径。 这 --include-路径 选项应该
匹配每个 (包括由于自动获取 克隆, 提交, 变基,
等)在给定的存储库上。 --忽略路径 优先于 --include-路径.

配置密钥:svn-remote。 .include-paths

--log-window-size=
拿来扫描 Subversion 历史时每个请求的日志条目。 默认是
100. 对于非常大的 Subversion 存储库,可能需要更大的值
克隆/ 在合理的时间内完成。 但过大的值可能会导致
更高的内存使用率和请求超时。

克隆
运行 初始化. 它将根据基本名称自动创建一个目录
传递给它的 URL; 或者如果传递了第二个参数; 它将创建一个目录
并在其中工作。 它接受所有参数 初始化 命令
接受; 除了 --获取所有--父母. 克隆存储库后,
这些因素包括原料奶的可用性以及达到必要粉末质量水平所需的工艺。 命令将能够在不影响工作树的情况下更新修订;
变基 命令将能够使用最新的更新工作树
的变化。

--保留空目录
在本地 Git 存储库中为每个空目录创建一个占位符文件
从 Subversion 获取。 这包括通过删除变空的目录
Subversion 存储库中的所有条目(但不是目录本身)。 这
不再需要时,也会跟踪和删除占位符文件。

--placeholder-文件名=
设置由 --preserve-empty-dirs 创建的占位符文件的名称。 默认:
“.gitignore”

变基
这会从当前 HEAD 的 SVN 父级获取修订版并重新设定当前的
(不致力于 SVN)反对它。

这类似于 svn update 或 混帐 除了它保留了线性历史
- 混帐 变基 而不是 混帐 合并 为了便于 dcommitting 混帐 svn.

这接受所有选项 混帐 svn 混帐 变基 接受。 然而,
--获取所有 只从当前的 [svn-remote] 中获取,而不是所有的 [svn-remote]
定义。

喜欢 混帐 变基; 这要求工作树是干净的并且没有未提交的
的变化。

如果需要,这会自动更新 rev_map(请参阅 $GIT_DIR/svn/**/.rev_map.* in
有关详细信息,请参阅下面的文件部分)。

-l,--本地
不要远程取货; 只跑 混帐 变基 针对最后一次提取的提交
上游SVN。

提交
将当前分支的每个diff直接提交到SVN仓库,然后
rebase 或 reset(取决于 SVN 和 head 之间是否存在差异)。
这将为 Git 中的每个提交在 SVN 中创建一个修订版。

当可选的 Git 分支名称(或 Git 提交对象名称)被指定为
参数,子命令适用于指定的分支,而不是当前分支。

用于 提交 优先于 集合树 (下面)。

--无变基
提交后,不要变基或重置。

--commit-url
提交到这个 SVN URL(完整路径)。 这是为了让现有的 混帐 svn
使用一种传输方法创建的存储库(例如 svn:// 或 http:// 用于
匿名读取),如果用户稍后被授予访问备用
用于提交的传输方法(例如 svn+ssh:// 或 https://)。

配置密钥:svn-remote。 .commiturl
配置键:svn.commiturl(覆盖所有 svn-remote.commiturl) .commiturl 选项)

请注意,commiturl 配置键的 SVN URL 包括 SVN 分支。 如果你
而是想为整个 SVN 存储库使用设置提交 URL
svn-远程。 .pushurl 代替。

强烈建议不要将此选项用于任何其他目的(不要问)。

--合并信息=
在 dcommit 期间添加给定的合并信息(例如
--mergeinfo="/branches/foo:1-10")。 所有 svn 服务器版本都可以存储这个
信息(作为属性),从 1.5 版开始的 svn 客户端可以使
使用它。 要指定来自多个分支的合并信息,请使用单个空格
分支之间的字符 (--mergeinfo="/branches/foo:1-10
/分支/酒吧:3,5-6,8")

配置键:svn.pushmergeinfo

此选项将导致 git-svn 尝试自动填充
如果可能,SVN 存储库中的 svn:mergeinfo 属性。 目前,这可以
仅当 dcommitting non-fast-forward 合并所有父级但
首先已经被推入SVN。

- 交互的
要求用户确认补丁集实际上应该发送到 SVN。 对于每个
补丁,可以回答“是”(接受此补丁)、“否”(丢弃此补丁)、“全部”
(接受所有补丁)或“退出”。

混帐 svn 提交 如果答案是“否”或“退出”,则立即返回,没有
向 SVN 提交任何内容。


在 SVN 存储库中创建一个分支。

-m,--消息
允许指定提交消息。

-t,--标签
使用 tags_subdir 而不是指定的 branch_subdir 创建标签
在 git svn init 期间。

-d , --目的地=
如果给了不止一个 --branches (或 --tags) 选项 初始化 or 克隆
命令,您必须提供要创建的分支(或标签)的位置
在 SVN 存储库中。 指定用于创建分支的路径或
标签,并且应该匹配其中一个配置的左侧的模式
分支或标签 refspecs。 您可以使用命令查看这些 refspecs

git config --get-all svn-remote。 .分支
git config --get-all svn-remote。 .tags

在哪里是由 -R 选项指定的 SVN 存储库的名称
初始化 (或默认为“svn”)。

- 用户名
指定执行提交的 SVN 用户名。 此选项覆盖
用户名 配置属性。

--提交网址
使用指定的 URL 连接到目标 Subversion 存储库。 这是
在源 SVN 存储库是只读的情况下很有用。 这个选项
覆盖配置属性 提交网址.

git config --get-all svn-remote。 .commiturl

- 父母
创建父文件夹。 这个参数相当于参数--parents on
svn cp 命令,对于非标准存储库布局很有用。

行李牌
在 SVN 存储库中创建标签。 这是一个简写 -t.

日志
当 svn 用户引用时,这应该可以很容易地查找 svn 日志消息
-r/--修订号。

支持来自“svn log”的以下功能:

-r [: ], --revision= [: ]
支持,非数字参数不是:HEAD、NEXT、BASE、PREV 等...

-v,--详细
它与 svn 日志中的 --verbose 输出并不完全兼容,但是
相当接近。

--限制=
与 --max-count 不同,不计算合并/排除的提交

- 增加的
支持的

新功能:

--显示提交
还显示了 Git 提交 sha1

- 一条线
我们的 --pretty=oneline 版本

备注
SVN 本身只以 UTC 格式存储时间,没有别的。 常规 svn 客户端
将 UTC 时间转换为本地时间(或基于 TZ= 环境)。 这个
命令具有相同的行为。
任何其他参数直接传递给 混帐 日志


显示文件的每一行最后修改的版本和作者。 这个输出
默认情况下,模式与 'svn blame' 的输出格式兼容。 像SVN
blame 命令,忽略工作树中本地未提交的更改; 版本
HEAD 修订版中的文件的注释。 未知参数直接传递
混帐 .

--git-格式
以相同的格式生成输出 混帐 , 但带有 SVN 修订号
而不是 Git 提交哈希。 在此模式下,尚未提交的更改
SVN(包括本地工作副本编辑)显示为修订版 0。

查找-转
当给出表单的 SVN 修订号时 rN, 返回对应的 Git 提交
散列(这可以可选地后跟一个树-ish 来指定哪个分支应该是
搜索)。 当给定树形时,返回相应的 SVN 修订号。

-B,--之前
如果给定 SVN 修订版,则不需要完全匹配,而是查找提交
对应于 SVN 存储库(在当前分支上)的状态
指定的修订版。

-A,--之后
如果给定 SVN 修订版,则不需要完全匹配; 如果没有确切的
match 返回历史中向前搜索的最接近的匹配项。

集合树
你应该考虑使用 提交 而不是这个命令。 提交指定的提交或
树对象到 SVN。 这依赖于您导入的获取数据是最新的。 这个
在提交到 SVN 时绝对不尝试打补丁,它只是
用树或提交中指定的文件覆盖文件。 假设所有合并
独立于 混帐 svn 功能。

创建忽略
递归查找目录上的 svn:ignore 属性并创建匹配
.gitignore 文件。 生成的文件被暂存为提交,但不是
坚定的。 使用 -r/--revision 来引用特定的修订版。

显示忽略
递归查找并列出目录上的 svn:ignore 属性。 输出是
适合附加到 $GIT_DIR/info/exclude 文件。

目录
尝试根据信息重新创建核心 Git 无法跟踪的空目录
在 $GIT_DIR/svn/ /unhandled.log 文件。 空目录是自动的
使用“git svn clone”和“git svn rebase”时重新创建,因此“mkdirs”用于
在诸如“git checkout”或“git reset”之类的命令之后使用。 (见
svn-远程。 .automkdirs 配置文件选项以获取更多信息。)

提交差异
从命令行提交两个树形参数的差异。 这个命令做
不要依赖于 git svn init-ed 存储库内。 这个命令需要三个
参数,(a)要与之比较的原始树,(b)新树结果,(c)URL
目标 Subversion 存储库。 最后一个参数 (URL) 可能会被省略,如果你
正在从一个 混帐 svn-aware 存储库(已使用 混帐 svn)。 该
-r 为此需要选项。

info
显示有关文件或目录的信息,类似于 'svn info' 提供的信息。 做
当前不支持 -r/--revision 参数。 使用 --url 选项仅输出
的价值 网址: 领域。

道具列表
列出存储在 Subversion 存储库中的关于给定文件的属性或
目录。 使用 -r/--revision 来引用特定的 Subversion 修订版。

道具
获取作为文件的第一个参数给出的 Subversion 属性。 一个特定的
可以使用 -r/--revision 指定修订版本。

显示外部
显示 Subversion 外部组件。 使用 -r/--revision 指定特定的修订版本。

gc
压缩 $GIT_DIR/svn/ /unhandled.log 文件并删除
$GIT_DIR/svn/ /index 文件。

重置
取消效果 回到指定的修订版。 这使您可以
重新 SVN 修订版。 通常 SVN 修订版的内容永远不应该改变
重置 应该没有必要。 但是,如果 SVN 权限更改,或者如果您更改
您的 --ignore-paths 选项,一个 可能会因“未在提交中找到”而失败(文件不在
以前可见)或“校验和不匹配”(错过了修改)。 如果问题
文件不能永远被忽略(使用 --ignore-paths)修复 repo 的唯一方法
是使用 重置.

只有 rev_map 和 refs/remotes/git-svn 被改变(见 $GIT_DIR/svn/**/.rev_map.*
在下面的文件部分了解详细信息)。 跟随 重置 然后 混帐 重置
or 混帐 变基 将本地分支移动到新树上。

-r , --修订=
指定要保留的最新修订。 所有后来的修订都将被丢弃。

-p,--父级
也丢弃指定的修订版,而是保留最近的父级。

计费示例:
假设您在“master”中有本地更改,但您需要重新获取“r2”。

r1---r2---r3 遥控器/git-svn

A---B大师

修复导致“r2”不完整的ignore-paths或SVN权限问题
首先。 然后:

git svn 重置 -r2 -p
git svn 获取

r1---r2'--r3' 遥控器/git-svn

r2---r3---A---B 主站

然后用 混帐 变基. 不使用 混帐 合并 否则你的历史不会
与未来兼容 提交!

git rebase --onto 遥控器/git-svn A^ master

r1---r2'--r3' 遥控器/git-svn

A'--B' 大师

配置


--shared[=(false|true|umask|group|all|world|everybody)], --template=
仅与 初始化 命令。 这些直接传递给 混帐 初始化.

-r , - 修订
命令。

这允许支持部分/烧灼历史的修订范围。 $NUMBER,
$NUMBER1:$NUMBER2(数字范围)、$NUMBER:HEAD 和 BASE:$NUMBER 均受支持。

这可以让你在运行 fetch 时制作部分镜像; 但一般不会
推荐,因为历史将被跳过和丢失。

-, --标准输入
仅与 集合树 命令。

从 stdin 读取提交列表并以相反的顺序提交它们。 只有领先
sha1 从每一行读取,所以 混帐 版本列表 --漂亮=在线 可以使用输出。

--rmdir
仅与 提交, 集合树提交差异 命令。

如果没有留下任何文件,则从 SVN 树中删除目录。 SVN可以
version 空目录,如果没有文件,默认情况下不会删除它们
留在他们。 Git 不能对空目录进行版本控制。 启用此标志将使
承诺 SVN 就像 Git 一样。

配置键:svn.rmdir

-e, - 编辑
仅与 提交, 集合树提交差异 命令。

在提交到 SVN 之前编辑提交消息。 对于对象,默认情况下这是关闭的
这是提交,并在提交树对象时强制执行。

配置键:svn.edit

-l , --find-copies-harder
仅与 提交, 集合树提交差异 命令。

它们都直接传递给 混帐 差异树; 看到 混帐差异树(1) 更多
信息。

配置键:svn.l
配置键:svn.findcopiesharder

-一种, --authors-file=
语法与使用的文件兼容 混帐 导入:

登录名 = Joe 用户user@example.com>

如果指定了此选项并且 混帐 svn 遇到一个 SVN 提交者名称
存在于作者文件中, 混帐 svn 将中止操作。 然后用户将不得不
添加适当的条目。 重新运行之前的 混帐 svn 命令后
修改作者文件应继续操作。

配置键:svn.authorsfile

--authors-prog=
如果指定了这个选项,对于每个不存在于
author 文件,给定的文件以提交者名称作为第一个执行
争论。 该程序应返回单行形式的“名称”,
这将被视为包含在作者文件中。

-q, --安静
品牌 混帐 svn 不那么冗长。 指定第二次以使其更不冗长。

-m, --merge, -s , --策略= , -p, --preserve-merges
这些仅与 提交变基 命令。

直接传给 混帐 变基 使用时 提交 如果一个 混帐 重置 不能使用(见
提交).

-n, --试运行
这可以与 提交, 变基, 行李牌 命令。

对于 提交, 打印出一系列 Git 参数,这些参数将显示哪些差异会
致力于SVN。

对于 变基, 显示与上游 svn 存储库关联的本地分支
与当前分支和将要获取的 svn 存储库的 URL 相关联
从。

对于 行李牌, 显示创建时将用于复制的 url
分支或标记。

--使用日志作者
当检索 svn 提交到 Git 时(作为 , 变基提交
操作),查找日志消息中的第一个 From: 或 Signed-off-by: 行和
将其用作作者字符串。

--add-作者-来自
当从 Git 提交到 svn 时(作为 提交差异, 集合树 or 提交
操作),如果现有的日志消息还没有发件人:或
Signed-off-by: 行,根据 Git 提交的作者字符串附加 From: 行。 如果
你使用它,然后 --use-log-author 将检索所有的有效作者字符串
提交。

⁠高级课程 配置


-一世, - ID
这会设置 GIT_SVN_ID(而不是使用环境)。 这允许用户
在跟踪单个 URL 时覆盖要从中获取的默认 refname。 这 日志
提交 命令不再需要此开关作为参数。

-R , --svn-远程
指定 [svn-remote " "] 节使用,这允许 SVN 多个
要跟踪的存储库。 默认值:“svn”

--跟随父母
此选项仅在我们跟踪分支时才相关(使用存储库之一
布局选项 --trunk、--tags、--branches、--stdlayout)。 对于每个跟踪的分支,尝试
找出它的修订版本是从哪里复制的,并在第一个中设置一个合适的父级
分支的 Git 提交。 这在我们跟踪目录时特别有用
已在存储库中移动。 如果禁用此功能,则
创建的分支 混帐 svn 都将是线性的并且不共享任何历史,这意味着
不会有关于分支在哪里分支或合并的信息。 然而,
跟踪长/复杂的历史可能需要很长时间,因此禁用此功能
可能会加快克隆过程。 默认情况下启用此功能,请使用
--no-follow-parent 禁用它。

配置键:svn.followparent

配置 仅文件 配置


svn.noMetadata, svn-remote。 .no元数据
这摆脱了 git-svn-id: 每次提交结束时的行。

此选项只能用于一次性导入,因为 混帐 svn 将无法获取
再次没有元数据。 此外,如果您丢失了 $GIT_DIR/svn/**/.rev_map.*
文件, 混帐 svn 将无法重建它们。

这个 混帐 svn 日志 命令也不适用于使用它的存储库。 使用这个
使用 SvmProps 出于(希望)明显原因的选择。

不推荐此选项,因为它很难追踪旧参考
到现有文档、错误报告和档案中的 SVN 修订号。 如果你
计划最终从 SVN 迁移到 Git,并且确定要删除 SVN 历史记录,
考虑 git-过滤器分支(1) 代替。 filter-branch 还允许重新格式化
元数据,便于阅读和重写非“svn.authorsFile”的作者信息
用户。

svn.useSvmProps, svn-remote。 .useSvmProps
这允许 混帐 svn 从使用创建的镜像重新映射存储库 URL 和 UUID
用于元数据的 SVN::Mirror(或 svk)。

如果 SVN 修订版具有属性“svm:headrev”,则该修订版很可能是
由 SVN::Mirror 创建(也由 SVK 使用)。 该属性包含一个存储库 UUID 和
一个修订。 我们想让它看起来像是在镜像原始 URL,所以
引入一个辅助函数,返回原始身份 URL 和 UUID,并使用
它在提交消息中生成元数据时。

svn.useSvnsyncProps, svn-remote。 .useSvnsyncprops
类似于 useSvmProps 选项; 这是给用户的 同步(1) 命令
随 SVN 1.4.x 及更高版本一起分发。

svn-远程。 .rewriteRoot
这允许用户从备用 URL 创建存储库。 例如,一个
管理员可以运行 混帐 svn 在本地服务器上(通过 file:// 访问)但希望
在元数据中使用公共 http:// 或 svn:// URL 分发存储库,以便
它的用户将看到公共 URL。

svn-远程。 .rewriteUUID
类似于 useSvmProps 选项; 这适用于需要重新映射 UUID 的用户
手动。 这在原始 UUID 不可用的情况下可能很有用
通过 useSvmProps 或 useSvnsyncProps。

svn-远程。 .pushurl
类似于 Git 的 偏僻的。 .pushurl,此键旨在用于以下情况
网址 通过只读传输指向 SVN 存储库,以提供替代
读/写传输。 假设两个键都指向同一个存储库。
不比 提交网址, 推网址 是基本路径。 如果任一 提交网址 or 推网址 可以
用过的, 提交网址 优先。

svn.brokenSymlink解决方法
这会禁用潜在的昂贵检查,以解决签入的损坏符号链接
损坏的客户端的 SVN。 如果您使用以下命令跟踪 SVN 存储库,请将此选项设置为“false”
许多不是符号链接的空 blob。 此选项可能会更改,同时 混帐 svn is
运行并在获取的下一个修订版上生效。 如果未设置, 混帐 svn 假设这个
选项为“真”。

svn.路径名编码
这指示 git svn 将路径名重新编码为给定的编码。 它可以由
windows 用户和那些在非 utf8 语言环境中工作的人,以避免损坏的文件名
带有非 ASCII 字符。 有效的编码是 Perl 的 Encode 支持的编码
模块。

svn-远程。 .automkdirs
通常,“git svn clone”和“git svn rebase”命令会尝试重新创建空
Subversion 存储库中的目录。 如果此选项设置为“false”,
那么只有在运行“git svn mkdirs”命令时才会创建空目录
明确地。 如果未设置, 混帐 svn 假定此选项为“真”。

由于 noMetadata、rewriteRoot、rewriteUUID、useSvnsyncProps 和 useSvmProps 选项
所有这些都会影响生成和使用的元数据 混帐 svn; 他们 必须 设置在
在导入任何历史记录之前的配置文件,这些设置不应该被
设置后更改。

此外,每个 svn-remote 部分只能使用这些选项之一,因为它们
影响 git-svn-id: 元数据行,除了 rewriteRoot 和 rewriteUUID 可以是
一起使用。

基础课程 示例


跟踪和贡献一个 Subversion 管理的项目的主干(忽略标签和
分支):

# 克隆一个仓库(比如 git clone):
git svn 克隆 http://svn.example.com/project/trunk
# 进入新克隆的目录:
CD后备箱
# 你应该在 master 分支上,用 'git branch' 仔细检查
git分支
# 做一些工作并在本地提交到 Git:
git提交...
# 某些东西被提交到 SVN,根据你的本地更改重新设置
# SVN 的最新变化:
git svn 变基
# 现在将您的更改(之前使用 Git 提交的)提交到 SVN,
# 以及自动更新您的工作 HEAD:
git svn 提交
# 将 svn:ignore 设置附加到默认的 Git 排除文件中:
git svn show-ignore >> .git/info/exclude

跟踪和贡献整个 Subversion 管理的项目(完成一个主干,
标签和分支):

# 使用标准的 SVN 目录布局克隆一个 repo(如 git clone):
git svn 克隆 http://svn.example.com/project --stdlayout --前缀 svn/
# 或者,如果 repo 使用非标准目录布局:
git svn 克隆 http://svn.example.com/project -T tr -b 分支 -t 标签 --prefix svn/
# 查看你克隆的所有分支和标签:
git分支-r
# 在SVN中新建一个分支
git svn 分支 waldo
# 将你的 master 重置为主干(或任何其他分支,替换 'trunk'
# 使用适当的名称):
git 重置 --hard svn/trunk
# 你一次只能提交一个分支/标签/主干。 用法
# of dcommit/rebase/show-ignore 应该和上面一样。

初始 混帐 svn 克隆 可能非常耗时(特别是对于大型 Subversion
存储库)。 如果多人(或一人多机)想使用 混帐
svn 要与同一个 Subversion 存储库交互,您可以执行初始操作 混帐 svn 克隆
到服务器上的存储库,并让每个人克隆该存储库 混帐 克隆:

# 在服务器上进行初始导入
ssh 服务器“cd /pub && git svn 克隆 http://svn.example.com/project [选项...]”
# 在本地克隆 - 确保 refs/remotes/ 空间与服务器匹配
mkdir 项目
cd项目
git init
git远程添加源服务器:/pub/project
git config --replace-all remote.origin.fetch '+refs/remotes/*:refs/remotes/*'
混帐
# 防止将来从远程 Git 服务器获取/拉取,
# 我们只想在未来的更新中使用 git svn
git config --删除部分remote.origin
# 从刚刚获取的分支之一创建一个本地分支
git checkout -b 主 FETCH_HEAD
# 在本地初始化 'git svn'(确保使用相同的 URL 和
# --stdlayout/-T/-b/-t/--prefix 选项在服务器上使用)
git svn 初始化 http://svn.example.com/project [选项...]
# 从 Subversion 拉取最新的更改
git svn 变基

重新定位 VS。 拉/合并


更喜欢使用 混帐 svn 变基 or 混帐 变基, 而不是 混帐 or 混帐 合并
将未集成的提交与 混帐 svn 分支。 这样做将保留历史
未集成提交相对于上游 SVN 存储库线性并允许使用
的首选 混帐 svn 提交 将未集成的提交推送回 SVN 的子命令。

本来, 混帐 svn 建议开发者从 混帐 svn 科。
这是因为作者偏爱 git svn set-tree B 提交单个头而不是
git svn set-tree A..B 表示法来提交多个提交。 用于 混帐 or 混帐
合并 使用 git svn set-tree A..B 将导致非线性历史在以下情况下展平
提交到 SVN,这可能会导致合并提交意外地反转以前的
在 SVN 中提交。

合并 快递追踪


混帐 svn 可以跟踪存储库的复制历史(包括分支和标签)
采用标准布局,它还不能代表 git 内部发生的合并历史
返回上游给 SVN 用户。 因此,建议用户将历史记录保持为线性
可以在 Git 内部简化与 SVN 的兼容性(请参阅下面的 CAVEATS 部分)。

搬运 OF SVN 分支机构


If 混帐 svn 配置为获取分支(并且 --follow-branches 生效),它
有时会为一个 SVN 分支创建多个 Git 分支,其中额外的分支
有表格名称 分行名称@nnn (带有 nnn 一个 SVN 修订号)。 这些额外的
如果创建分支 混帐 svn 在 SVN 中找不到第一次提交的父提交
分支,将分支连接到其他分支的历史记录。

通常,SVN 分支中的第一次提交由复制操作组成。 混帐 svn
阅读此提交以获取创建分支的 SVN 修订版。 然后它会尝试
找到与此 SVN 修订版相对应的 Git 提交,并将其用作
分支。 但是,可能没有合适的 Git 提交作为
父母。 如果 SVN 分支是修订版的副本,除其他原因外,会发生这种情况
不是由 混帐 svn (例如,因为它是一个旧版本,被跳过
- 修订),或者如果在 SVN 中复制了一个未被跟踪的目录 混帐 svn (比如一个
根本没有被跟踪的分支,或被跟踪分支的子目录)。 在这些情况下,
混帐 svn 仍然会创建一个 Git 分支,但不会使用现有的 Git 提交作为
分支的父级,它将读取分支被复制的目录的 SVN 历史记录
从并创建适当的 Git 提交。 这由消息“正在初始化
家长: ”。

此外,它将创建一个名为的特殊分支 @,在 Moku:Pro 上
是从其复制分支的 SVN 修订号。 这家分店将
指向新创建的分支的父提交。 如果在 SVN 中删除了分支
后来从不同的版本重新创建,会有多个这样的分支
@.

请注意,这可能意味着为单个 SVN 修订版创建了多个 Git 提交。

示例:在具有标准主干/标签/分支布局的 SVN 存储库中,目录
中继/子是在 r.100 中创建的。 在 r.200 中,trunk/sub 通过将其复制到分支/来进行分支。
混帐 svn 克隆 -s 然后将创建一个分支 . 它还将创建新的 Git 提交
r.100 到 r.199 并将这些用作分支的历史记录 . 这样就会有两个 Git
提交从 r.100 到 r.199 的每个修订版(一个包含主干/,一个包含
主干/子/)。 最后,它会创建一个分支 低于@200 指向新的父提交
(即r.200 和trunk/sub/ 的提交)。

洞穴


为了简单起见和与 Subversion 的互操作,建议所有
混帐 svn 用户直接从 SVN 服务器克隆、获取和 dcommit,并避免所有 混帐
克隆//合并/ Git 存储库和分支之间的操作。 推荐的
Git 分支和用户之间交换代码的方法是 混帐 格式补丁混帐 am,
或者只是“提交”到 SVN 存储库。

运行 混帐 合并 or 混帐 不建议在您计划的分支上使用 提交
因为 Subversion 用户看不到您所做的任何合并。 此外,如果您合并或
从作为 SVN 分支镜像的 Git 分支中提取, 提交 可能会犯错
科。

如果您进行合并,请注意以下规则: 混帐 svn 提交 将尝试提交
命名为 SVN 提交

git log --grep=^git-svn-id: --first-parent -1

必须 因此,请确保您要提交的分支的最新提交
第一 合并的父级。 否则会出现混乱,特别是如果第一个
parent 是同一个 SVN 分支上的较旧提交。

混帐 克隆 不克隆 refs/remotes/hierarchy 下的分支或任何 混帐 svn
元数据或配置。 因此使用 using 创建和管理存储库 混帐 svn 应该用
rsync的 对于克隆,如果要进行克隆的话。

建立 提交 在内部使用 rebase,任何 Git 分支你 混帐 之前 提交 on
将需要强制覆盖远程存储库上的现有引用。 这是
通常被认为是不好的做法,请参阅 混帐推送(1) 文档的详细信息。

不要使用 --amend 选项 git提交(1) 关于您已经提交的更改。 它
被认为是不好的做法 --amend 已经推送到远程存储库的提交
对于其他用户,使用 SVN 进行 dcommit 与此类似。

克隆 SVN 存储库时,如果没有用于描述存储库的选项
使用布局(--trunk、--tags、--branches、--stdlayout), 混帐 svn 克隆 将创建一个 Git
具有完全线性历史的存储库,其中分支和标签显示为单独的
工作副本中的目录。 虽然这是获取完整副本的最简单方法
存储库,对于具有许多分支的项目,它将多次导致工作副本
比行李箱还大。 因此对于使用标准目录结构的项目
(trunk/branchs/tags),建议使用option克隆 --标准布局. 如果项目
使用非标准结构,和/或如果不需要分支和标签,这是最简单的
只克隆一个目录(通常是主干),而不提供任何存储库布局
选项。 如果需要带有分支和标签的完整历史记录,则选项 - 树干 /
--分支 / --标签 必须使用。

当使用多个 --branches 或 --tags 时, 混帐 svn 不自动处理名称
冲突(例如,如果来自不同路径的两个分支具有相同的名称,或者
分支和标签具有相同的名称)。 在这些情况下,使用 初始化 设置你的 Git
存储库然后,在你的第一个之前 , 编辑 $GIT_DIR/config 文件,以便
分支和标签与不同的名称空间相关联。 例如:

分支 = stable/*:refs/remotes/svn/stable/*
分支 = debug/*:refs/remotes/svn/debug/*

使用 onworks.net 服务在线使用 git-svn



最新的 Linux 和 Windows 在线程序