2011-04-27 43 views
2

我一直在阅读和寻找解决方案几天,但没有找到任何适合我的需求。使用SVN(或git)自动提交文件修改?

我们经常更新由设计师和开发人员更新的网站,大多数时候他们不会对SVN进行更改。

我在寻找持续集成类型的解决方案,其中当登台服务器上的“版本化”文件得到更新时,它会自动提交给SVN。

我看过的CruiseControl和其他工具不这样做;有没有一种工具可以实现这个或者我们可以使用的更好的过程?

感谢您的帮助!

Chris

+1

看到这个问题上程序员:[让非程序员参与的简单方法(即设计师)使用版本控制?](http://programmers.stackexchange.com/questions/43819/easy-way-of-engaging-non-programmers-ie-designers-into-using-version-control) – CharlesB 2011-04-27 17:26:04

回答

5

我真的很喜欢你说“更好的过程”,因为答案是肯定的。

让你的设计师和每个人都从回购工作。如果你选择SVN或者git或者别的什么都没关系,但是要做到“权威”的副本。这样做最终会让你头痛,因为你可以清楚地记录所有的变化,并且可以随时恢复。

我已经安装了网页设计商店只有环境是一个系统,相反你提出什么样的方式,它的工作原理是这样的:

  • 所有设计师对网站的签出份工作,并进行修改和根据需要提交/更新。
  • 在提交时,存储库将站点的副本推送到登台服务器,登台服务器的配置与生产几乎相同。
  • 如果该站点正在进行分段工作,则非常有信心它可以在实时服务器上工作。
  • 准备好后,登台服务器上的站点副本可以复制到现场,现在您已经以非常负责任的方式更新了您的站点,并且您有所有变更的历史记录。 (对于这个我喜欢使用rsync,你可以让它工作,但你认为合适)

我希望这可以帮助你考虑一下你的过程。如果你真的不想改变你的过程,你可以设置一个cron,每隔几分钟运行一次,并添加/提交所有已更改的文件,并且应该可以工作。但我不喜欢这样,因为现在你没有有意义的提交信息,而且改变历史也可能没有意义。当人们在工作并保存文件时,他们没有意识到他们正在提交什么内容,因此很可能现在版本库中的修订版本已经处于崩溃状态,现在如何找到未被破坏的修订版本?选择“自动化”提交显然不是最干净的解决方案。

+0

是的,这似乎是最好的选择。这就是我在另一家公司所做的事情,但后来我被贬为了=)希望设计师能够确信遵循这一点,将布局好处。谢谢@ctcherry! – 2011-04-29 05:24:00

2

我相信(虽然我没有尝试过),你可以为看门狗(http://packages.python.org/watchdog/)写一个观察者,它会为你做提交。

但是,我同意ctcherry,你将得到很多保存在一个破碎的状态。你真的需要改变你的过程。

+0

是的,我想我会推动描述的过程ctcherry。 – 2011-04-29 05:20:36

2

CruiseControl的和其他工具,我 看着不这样做

我不敢苟同。如果您要配置一个<exec>块来调用SVN命令行工具来为您提交代码,那么这不会完全符合您的要求吗?您可以使用<filesystem>节点来确定哪些文件被修改。

现在,尽管你可以这样做,但我也同意@ctcherry的观点,如果你直接用这种方式进行生产,这可能会导致破坏代码。

2

听起来像你想使用WebDAV在Subversion中进行自动版本更新。 Subversion and WebDAV

我以前使用过这种方法。这是很好的,你可以设置它像一个Windows/Linux网络共享。非技术人员只是将其视为存储文件的网络驱动器。每当用户保存文档/文件时,都会默默承诺。

Git可能有类似的东西,但我没有经验。

+0

谢谢@SuperJames! – 2011-04-29 05:21:37

0

开发人员网站上,你可以开发支持这件事情一个工具,你可以看到下面的代码,下面的代码支持,你如何让汽车在SVN提交,看看:)

任何意见或提问,留下您的评论,我们可以讨论一下

参考代码在这里:

public static string AppTitle = "Auto Commit"; 

    // AddFileToSVN 
    public static bool AddFileToSVN(string strLogFile, string path, 
             Timer myTimer) 
    { 
     try 
     { 
      using (SharpSvn.SvnClient client = new SharpSvn.SvnClient()) 
      { 
       Collection changeFiles = new 
           Collection(); 
       client.GetStatus(path, out changeFiles); 

       foreach (SharpSvn.SvnStatusEventArgs changeFile in 
                changeFiles) 
       { 
        if (changeFile.LocalContentStatus == 
             SharpSvn.SvnStatus.Missing) 
        { 
         client.Delete(changeFile.Path); 
         WriteLog(strLogFile, changeFile.Path + " Removed - 
           Missing files (that are not in filesystem)"); 

         myTimer.Enabled = false; 
        } 

        if (changeFile.LocalContentStatus == 
            SharpSvn.SvnStatus.NotVersioned) 
        { 
         client.Add(changeFile.Path); 
         WriteLog(strLogFile, changeFile.Path + " Added - 
            This file is new in filesystem!"); 

         myTimer.Enabled = false; 
        } 
       } 
       return true; 
      } 
     } 
     catch (Exception ex) 
     { 
      myTimer.Enabled = true; 
      WriteLog(strLogFile, ex); 
      return false; 
     } 
    } 

    // CommitToSVN 
    public static bool CommitToSVN(string strLogFile, string workingcopy, 
              string message, Timer myTimer) 
    { 
     using (SharpSvn.SvnClient client = new SharpSvn.SvnClient()) 
     { 
      SharpSvn.SvnCommitArgs args = new SharpSvn.SvnCommitArgs(); 

      args.LogMessage = message; 
      args.ThrowOnError = true; 
      args.ThrowOnCancel = true; 

      try 
      { 
       myTimer.Enabled = true; 
       return client.Commit(workingcopy, args); 
      } 
      catch (Exception ex) 
      { 
       myTimer.Enabled = true; 
       WriteLog(strLogFile, ex); 
       return false; 
      } 
     } 
    } 

查看更多信息:从here

相关问题