我们正在将 SVN 迁移到 Git。在一个项目上。
一切都很好,但是我在保留一些未跟踪(忽略)的目录和文件的权限(文件模式)方面遇到了问题。我们以下流程:
- 清理 SVM 存储库(整理、清理未提交的内容等)
- 本地环境上的 svn2git(从联网的 SVN 迁移 - 所以最新版本,没有进一步的提交,这确实包括正确的
authors.txt
映射和对分支、标签等的正确跟踪) - 创建被忽略的文件和目录 li (.gitignore)st - 部分自动化
svn propget
,手动完成(逐行) 添加遥控器并推送到它(我们使用的是 github,但它应该无关紧要)
在这个阶段遥控器已经准备好,所有的历史都被转换了。现在是我想在不更改目录、移动文件或创建符号链接的情况下热迁移服务器部署的困难部分。假设有两个镜像环境位于两台不同的服务器上——一个用于测试版,一个用于生产版。让我们说目录是
/var/www/depl/
例如/。问题是,作为每个 Web 项目,都有我们不需要跟踪的目录和文件。 我将用命令编写我的步骤,因为我认为它也可以成为其他人的一个很好的指南。所以在服务器上的策略是:去那里
cd /var/www/depl/
- 通过备份到另一个目录
rsync
并按原样保留权限! - 递归删除所有 .svn 目录
find -type d -name .svn -exec rm -rf {} \;
- 初始化一个空的 git 存储库
git init
(注意我们没有使用“裸”存储库) - 添加 GitHub 远程并将其命名为“origin”,同时下载所有分支
git remote add -f https://github.com/ORG/REPO
- 检查状态(本地副本应该是干净的)
- 拉(所以 fetch + merge 但它实际上只是一个合并)
git pull origin master
这最后一步破坏了我的权限。还记得那些我不想/不需要跟踪的文件吗?现在看来,这些人的权限已被修改。它们都被正确地忽略了,但是当我应用拉/合并时它会中断。好的,确定问题来自远程存储库并通过合并。这不是问题,而是文件是如何提交的(使用什么文件模式)。
问题是: 在最后一步,拉取更新时,我可以指示 git 保留所有文件的当前文件权限吗?如在当前目录中并递归向下? 所以:不要更改任何本地权限?
是的,也许我之后会有一个差异和一些东西要提交,但这并不是一个大问题,因为权限被破坏了。
所以?有办法吗?服务器当然运行 Linux。
提前致谢。
干杯!