我正在尝试学习如何使用subversion。在我的mac os x服务器上,我有:
〜/ public_html(很多文件)
我也有/ var / svn / myproject(这是我使用svnadmin〜/ public_html / var / svn / myproject的svn目录)
在我的MacBook Pro上,我使用了svn checkout svn checkout svn:// myserver / mysvnpath
检查文件。
我编辑了一个文件并将一些简单的东西放进去。
我承诺,它没有给出任何错误,并说我在修订版2。
我的问题:
当我提交更新的文件时,服务器上的位置是什么?我从来没有在〜/ public_html中看到它改变。
我在服务器上的更新文件在哪里?我查看了修订文件,我可以看到转速中的2有我的更改(这只是添加了一行,phpinfo();)。
感谢您的帮助。
编辑:基于评论我可以看到我真的不明白。 编辑:我在〜/ public_html中尝试了svn update,但我的index.php文件永远不会改变。有趣的是,我有另一台机器,我检查了代码,它显示了新版本(2)。我只是无法将其恢复到〜/ public_html中。如果我必须手动将其复制回〜/ public_html,那么我如何确定正在使用最新版本。此时存储库有什么用处?我知道它跟踪更改,但如果我更新服务器上的web目录,我希望它推出最新版本。答案 0 :(得分:2)
我认为此SVN常见问题解答条目可以帮助您:“I'm managing a website in my repository. How can I make the live site automatically update after every commit?”:
这是一直这样做的,而且是 通过添加一个轻松完成 post-commit hook脚本到你的 库。阅读有关钩子脚本的信息 本书第5章。基本的想法 是使“现场”只是一个 普通的工作副本,然后有 你的post-commit钩子脚本运行'svn 更新'上面。
在实践中,有几个 需要注意的事项。服务器 程序执行提交 (svnserve或apache)是一样的 将运行的程序 post-commit钩子脚本。这意味着 这个程序必须有适当的 权限更新工作 复制。换句话说,工作副本 必须由同一用户拥有 svnserve或apache运行为 - 或在 至少工作副本必须有 适当的权限设置。
如果服务器需要更新a 它不拥有的工作副本(for 例如,用户joe的〜/ public_html / 区域),一种技术是创造一个+ s 二进制程序来运行更新, 因为Unix不允许脚本运行 + S。编译一个小C程序:
#include <stddef.h> #include <stdlib.h> #include <unistd.h> int main(void) { execl("/usr/local/bin/svn", "svn", "update", "/home/joe/public_html/", (const char *) NULL); return(EXIT_FAILURE); }
...然后chmod + s二进制文件,和 确保它由用户'joe'拥有。 然后在post-commit钩子中添加一个 用于运行二进制文件的行。
如果您在获取挂钩时遇到问题 工作,请参阅“为什么不是我的存储库 挂钩工作?“。
另外,你可能想要阻止 导出.svn /的apache 实时工作副本中的目录。 将其添加到httpd.conf:
# Disallow browsing of Subversion working copy administrative dirs. <DirectoryMatch "^/.*/\.svn/"> Order deny,allow Deny from all
替代方案:您可以使用就地导入。看here怎么做。
答案 1 :(得分:1)
同样的困惑我已经看过很多了。
您的SVN(如果它是SVN服务器)(/var/svn/myproject
)和您的网络服务器(~/public_html
)完全分开且彼此无关。您需要将文件保存/上传到〜/ public_html文件夹,并提交到SVN(服务器)。一个是网络服务器,另一个是SVN(服务器)。
我工作时使用的一般过程是:
每次进行一组更改时都会重复,除了结帐,您需要进行更新,以便您在其他地方或其他人所做的更改。 (每当我处理一组特定的更改或网站的错误时,我都会执行此过程,以便跟踪每次更改所做的操作的历史记录。)
SVN(服务器)仅用于跟踪更改。它通常作为Web服务器的模块运行,但与您的实际Web服务器无关。
如果您对此如何工作感到困惑,我建议您购买SVN服务,这样您就不会感到困惑,他们会处理SVN的设置及其相关问题。
编辑如果您希望它自动将您的版本发布到网络服务器(不推荐),那么您需要创建一个脚本,每15分钟左右更新一次。这非常糟糕,因为.svn文件夹最终会出现在webserver目录中。每次进行更改或将svn导出到该目录时,都需要手动执行此操作。
答案 2 :(得分:0)
您还需要在〜/ public_html上运行svn update。
我相信〜/ public_html是修订版1,你的macbook是修订版2。
答案 3 :(得分:0)
Rev 2文件将在/ var / svn / myproject中更新。为了在〜/ public_html中反映更改,您需要在该目录上执行SVN更新,因为它不会自动执行此操作,并且仍将处于修订版1,至少在您更新之前。您可以使用cronjob自动执行此过程,我相信有一种方法可以检测何时有新的SVN提交,但我不知道它是否/它是什么。
答案 4 :(得分:0)
您正在尝试解决以下两个流程:
如何管理使用相同源代码的不同人员。你为此设置了一个subversion服务器;开发人员检查其本地计算机上的代码并将更改提交给它。
将更改部署到实际网站。有几种方法可以实现这一点,具体取决于系统内置的质量保证级别,必须部署更改的速度等因素,......无论如何,建立正确的程序是最佳做法。用于部署。可以通过使您的Web服务器的public_html目录成为工作副本并在那里运行'svn update'(手动,调度或从提交后挂钩触发)来完成。但是,我会在真实的部署脚本中投入更多的时间(使用msbuild,nant,只是一个.bat文件,无论哪种方法适合你),它们会导出源(使用'svn export')并将它们放在正确的位置。