Svn 为什么subversion在执行提交时会切换到父目录

Svn 为什么subversion在执行提交时会切换到父目录,svn,shell,directory,Svn,Shell,Directory,当我从unix命令行执行svn提交时,它会在打开编辑器之前切换到父目录。这导致了我在进行炮弹逃逸时的巨大困惑,因为我不在我想的地方 这种行为的原因是什么 下面的编辑屏幕截图显示这发生在最低的目录中,而不是在最高的目录中 svn --version svn, version 1.5.5 (r34862) test: svn checkout file:///export/home/svn/xxx/a A a/b A a/b/c A a/b/c/new Checked out r

当我从unix命令行执行svn提交时,它会在打开编辑器之前切换到父目录。这导致了我在进行炮弹逃逸时的巨大困惑,因为我不在我想的地方

这种行为的原因是什么

下面的编辑屏幕截图显示这发生在最低的目录中,而不是在最高的目录中

svn --version svn, version 1.5.5 (r34862)

test: svn checkout file:///export/home/svn/xxx/a
A    a/b
A    a/b/c
A    a/b/c/new
Checked out revision 8882.

test: cd a/b/c
test: pwd
/home/geretz/test/a/b/c
test: echo changed > new
test: svn commit

--This line, and those below, will be ignored--

M    c/new
~
~
:!pwd
/home/geretz/test/a/b

Hit ENTER or type command to continue
中止编辑会话,尝试从顶级目录提交

test: pwd
/home/geretz/test/a/b/c
test: cd ../..
test: pwd
/home/geretz/test/a
test: svn commit

--This line, and those below, will be ignored--

M    b/c/new
~
~
:!pwd
/home/geretz/test/a

Hit ENTER or type command to continue

如果浏览svn源,您会发现svn提交由中的svn_cl_提交函数处理。负责将路径拆分为“basename”和“dirname”的实际函数是svn_wc_get_Actual_target。此函数在中声明,并具有以下注释:

/**有条件地将@a路径拆分为@a锚点和@a目标 *更新和提交的目的。 * *@a锚点是更新或提交编辑器所在的目录 *应该扎根。 * *@a target是相对于目标的@a锚点的实际主体 *更新/提交,或者@a锚本身是主题。 * *在一个池中分配一个锚和一个目标。 */ 最后,在文件中,我们可以看到以下注释:

更新是通过驱动编辑器来完成的,而编辑器是 根目录。因此,为了更新文件,我们需要 断开文件的basename,在该文件中生成编辑器 文件的父目录,然后仅更新该文件,而不更新 父目录中的其他内容。 其次,我们看一下我们希望更新目录的情况。 这通常是微不足道的。然而,存在一个有问题的情况 当我们希望更新已从中删除的目录时 并替换为同名文件。如果我们扎根 我们在初始目录下进行编辑,没有针对 删除该目录并将其替换为一个文件 就像现在有一个编辑器锚定在一个文件上,这是不允许的。 剩下的就是拥有一个具有所需知识的功能 正确地决定编辑的根在哪里,以及采取什么行动 现在有了那个植根编辑。给定要更新的路径,此 函数应该有条件地将该路径拆分为一个锚点和 目标,其中锚点是更新所在的目录 editor是root意思是,editor->open\u root是用 这个目录记在心里,而目标是实际预期的 更新的主题。 svn_wc_get_实际_目标就是该函数。 ... 事实证明,提交需要进行类似的检查, 同样,特别是在使用单个目录的情况下 我们必须锚定在该目录的父目录,以防 目录本身需要修改
如果浏览svn源,您会发现svn提交由中的svn_cl_提交函数处理。负责将路径拆分为“basename”和“dirname”的实际函数是svn_wc_get_Actual_target。此函数在中声明,并具有以下注释:

/**有条件地将@a路径拆分为@a锚点和@a目标 *更新和提交的目的。 * *@a锚点是更新或提交编辑器所在的目录 *应该扎根。 * *@a target是相对于目标的@a锚点的实际主体 *更新/提交,或者@a锚本身是主题。 * *在一个池中分配一个锚和一个目标。 */ 最后,在文件中,我们可以看到以下注释:

更新是通过驱动编辑器来完成的,而编辑器是 根目录。因此,为了更新文件,我们需要 断开文件的basename,在该文件中生成编辑器 文件的父目录,然后仅更新该文件,而不更新 父目录中的其他内容。 其次,我们看一下我们希望更新目录的情况。 这通常是微不足道的。然而,存在一个有问题的情况 当我们希望更新已从中删除的目录时 并替换为同名文件。如果我们扎根 我们在初始目录下进行编辑,没有针对 删除该目录并将其替换为一个文件 就像现在有一个编辑器锚定在一个文件上,这是不允许的。 剩下的就是拥有一个具有所需知识的功能 正确地决定编辑的根在哪里,以及采取什么行动 现在有了那个植根编辑。给定要更新的路径,此 函数应该有条件地将该路径拆分为一个锚点和 目标,其中锚点是更新所在的目录 editor是root意思是,editor->open\u root是用 这个目录记在心里,而目标是实际预期的 更新的主题。 svn_wc_get_实际_目标就是该函数。 ... 事实证明,提交需要进行类似的检查, 同样,特别是在使用单个目录的情况下 我们必须锚定在该目录的父目录,以防 目录本身需要修改 svn-版本svn,
版本1.5.5 R34862是否切换到工作副本的直接父级或根级?如果是后者,我打赌你一定能找到原因……但是如果上面的目录不在svn控制之下,它将保留在当前目录中。你是直接使用svn还是通过shell脚本使用svn?在unix上调用本机svn客户端?是否包括正在运行的命令,包括目录结构的概要,以及打开时编辑器缓冲区的近似值?svn-版本svn,版本1.5.5 R34862是否切换到直接父级,或工作副本的根?如果是后者,我打赌你一定能找到原因……但是如果上面的目录不在svn控制之下,它将保留在当前目录中。你是直接使用svn还是通过shell脚本使用svn?在unix上调用本机svn客户端?是否包括正在运行的命令,包括目录结构的概要,以及编辑器缓冲区打开时的近似值?如果在编写消息时需要一个可预测的工作目录,看起来您最好的选择是创建提交消息,并在执行提交之前将其保存到文件中,然后通过svn commit-file commit_log.txt进行提交以使用它。不管怎么说,这基本上是在幕后发生的,只有文件是临时的,并且在提交完成后会自动删除。如果您在编写邮件时需要有一个可预测的工作目录,那么最好的办法就是创建提交邮件,并在执行提交之前将其保存到文件中,然后通过svn commit-file commit_log.txt提交以使用它。不管怎样,这基本上是在幕后发生的,只有文件是临时的,并且在提交完成后自动删除。