我的承诺文件在哪里?

时间:2009-08-08 18:25:28

标签: svn

我正在尝试学习如何使用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目录,我希望它推出最新版本。

5 个答案:

答案 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(服务器)。

我工作时使用的一般过程是:

  1. 将存储库签出到本地文件夹(而不是webserver目录,因为您不希望人们能够访问.svn文件夹)。
  2. 编辑必要的文件。
  3. 将文件从工作目录上传,保存或复制到Web服务器。测试以确保它的工作原理。 (某些编辑器,例如Dreamweaver或PhpEd可以在一个快捷键中保存到您的工作目录以及您的Web服务器目录(FTP或其他)。)
  4. 一旦您对更改感到满意,请使用SVN提交过程将更改放入SVN。
  5. 每次进行一组更改时都会重复,除了结帐,您需要进行更新,以便您在其他地方或其他人所做的更改。 (每当我处理一组特定的更改或网站的错误时,我都会执行此过程,以便跟踪每次更改所做的操作的历史记录。)

    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)

您正在尝试解决以下两个流程:

  1. 如何管理使用相同源代码的不同人员。你为此设置了一个subversion服务器;开发人员检查其本地计算机上的代码并将更改提交给它。

  2. 将更改部署到实际网站。有几种方法可以实现这一点,具体取决于系统内置的质量保证级别,必须部署更改的速度等因素,......无论如何,建立正确的程序是最佳做法。用于部署。可以通过使您的Web服务器的public_html目录成为工作副本并在那里运行'svn update'(手动,调度或从提交后挂钩触发)来完成。但是,我会在真实的部署脚本中投入更多的时间(使用msbuild,nant,只是一个.bat文件,无论哪种方法适合你),它们会导出源(使用'svn export')并将它们放在正确的位置。