如何在不破坏SVN的情况下重命名Python包中的文件夹?
在我的PyCharm项目中,我有这样一个结构:如何在不破坏SVN的情况下重命名Python包中的文件夹?,python,svn,Python,Svn,在我的PyCharm项目中,我有这样一个结构: first_package └───first_package └───first_file.py secondpackage └───secondpackage └───second_file.py 我想从第一个包中删除下划线,但此包在第二个包(和其他包)中使用 使用PyCharm的重构工具,这应该是一项非常简单的任务,但是,如果PyCharm在没有事先通知的情况下将两个first_package目录重命名为firstpacka
first_package
└───first_package
└───first_file.py
secondpackage
└───secondpackage
└───second_file.py
我想从第一个包
中删除下划线,但此包在第二个包
(和其他包)中使用
使用PyCharm的重构工具,这应该是一项非常简单的任务,但是,如果PyCharm在没有事先通知的情况下将两个first_package
目录重命名为firstpackage
,我敢肯定SVN不会喜欢它
我对SVN的理解是,我应该使用SVN mv
,然后是SVN commit
,来更改文件/目录的名称。问题是,如果我这样做,我将在PyCharm之外重命名目录,那么毫无疑问,我将有一些容易出错的搜索和替换工作要做
我是否忽略了一个简单的解决方案?从原始树开始:
.
├── first_package
│ └── first_package
│ └── first_file.py
└── secondpackage
└── secondpackage
└── second_file.py
继续,让您的重构工具将您的树变成:
.
├── firstpackage
│ └── firstpackage
│ └── first_file.py
└── secondpackage
└── secondpackage
└── second_file.py
然后svn status
给出:
$ svn status
! first_package
! first_package/first_package
! first_package/first_package/first_file.py
? firstpackage
此时,如果我们尝试svn mv
记录svn中发生的情况,我们会得到一个错误:
$ svn mv first_package firstpackage
svn: E155010: Directory '/tmp/tmp.wlyfVrQasv/repo/firstpackage' is not under version control
这是因为svn mv
想要执行移动操作。它不仅仅记录已经发生的事情
选项1(简单)
在此解决方案中,您将丢失SVN历史记录。如果您不关心历史,而且重构实际上非常复杂,那么这可能是一个简单的选择
svn status
标记为?
的对象使用svn add
svn status
标记为的对象使用svn del
代码>
$ svn status | grep -v /
! first_package
? firstpackage
要应用这一点:
$ mv firstpackage first_package
$ svn mv first_package firstpackage
A firstpackage
D first_package
D first_package/first_package
D first_package/first_package/first_file.py
如果我们检查svn status
并查找下一级
和?
(并过滤掉py文件)我们看到:
接下来我们来处理这个问题:
$ mv firstpackage/firstpackage firstpackage/first_package
$ svn mv firstpackage/first_package firstpackage/firstpackage
A firstpackage/firstpackage
D firstpackage/first_package
D firstpackage/first_package/first_file.py
现在我们有了您想要的目录结构,SVN很高兴:
$ svn status
D first_package
> moved to firstpackage
A + firstpackage
> moved from first_package
D + firstpackage/first_package
> moved to firstpackage/firstpackage
A + firstpackage/firstpackage
> moved from firstpackage/first_package
现在,如果简单的解决方案是迁移到mercurial或git,那么您就可以
svn提交了
是的。JetBrains IDE通常对这类东西非常聪明。为什么不试试重构特性,看看会发生什么?除非您决定提交更改,否则更改不会“永久”它似乎应该在OOB(如果你与SVN集成)下工作。我没有足够的勇气尝试PyCharm。SVN已经够让人头疼的了,而且不必冒着不得不修复自己造成的问题的风险。事实上,我选择了@Stewart答案中的选项2。谢谢你的全面解决方案。我选择了选项2,因为我确实希望(需要)保留历史。
$ svn status
D first_package
> moved to firstpackage
A + firstpackage
> moved from first_package
D + firstpackage/first_package
> moved to firstpackage/firstpackage
A + firstpackage/firstpackage
> moved from firstpackage/first_package