Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SVN(或git)修改文件时自动提交?_Svn_Git_Continuous Integration - Fatal编程技术网

使用SVN(或git)修改文件时自动提交?

使用SVN(或git)修改文件时自动提交?,svn,git,continuous-integration,Svn,Git,Continuous Integration,几天来,我一直在阅读和寻找解决方案,但没有找到任何适合我需要的 我们经常更新由设计师和开发人员更新的站点,这些站点在大多数情况下不会将其更改提交给SVN 我正在研究持续集成类型的解决方案,其中,当登台服务器上的“版本连接”文件得到更新时,它会自动提交给SVN CruiseControl和我看过的其他工具都不能做到这一点;有没有一个工具可以做到这一点,或者我们可以使用一个更好的过程 谢谢你的帮助 克里斯我真的很喜欢你说的“更好的流程”,因为答案是肯定的 让你的设计师和每个人都在回购协议中工作。选择

几天来,我一直在阅读和寻找解决方案,但没有找到任何适合我需要的

我们经常更新由设计师和开发人员更新的站点,这些站点在大多数情况下不会将其更改提交给SVN

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

CruiseControl和我看过的其他工具都不能做到这一点;有没有一个工具可以做到这一点,或者我们可以使用一个更好的过程

谢谢你的帮助


克里斯

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

让你的设计师和每个人都在回购协议中工作。选择SVN、git或其他东西并不重要,但要使其成为“权威”副本。这样做最终会省去你的麻烦,因为你会有一个清晰的所有更改的历史记录,并且可以随时恢复

我为网页设计商店设置一些环境的方式是使用与您建议的系统相反的系统,其工作原理如下:

  • 所有设计师都会检查站点的副本,并根据需要进行更改和提交/更新
  • 提交时,存储库将站点的副本推送到一个临时服务器,该服务器的配置几乎与生产服务器相同
  • 如果站点正在进行登台,那么很有可能它会在实时服务器上工作
  • 准备就绪后,可以将登台服务器上的站点副本复制到live,现在您已经以非常负责任的方式更新了站点,并且拥有了所有更改的历史记录。(为此,我喜欢使用rsync,您可以让它以您认为合适的方式工作)
我希望这有助于您思考您的流程

回到您最初的问题:如果您真的不想更改流程,您可以设置一个cron,每隔几分钟运行一次,并添加/提交所有已更改的文件,这应该可以工作。但我不喜欢这样,因为现在您没有有意义的提交消息,而且更改历史也可能没有意义。当人们在工作和保存文件时,他们没有意识到他们在什么时候提交文件,所以现在存储库中很可能有处于损坏状态的修订,现在如何找到未损坏的修订?选择“自动化”提交显然不是最干净的解决方案。

我相信(尽管我没有尝试过)您可以为watchdog()编写一个观察器来完成提交

然而,我同意ctcherry的观点,在一个坏的状态下你会得到很多扑救。你真的需要改变你的流程

CruiseControl和我使用过的其他工具 看了,别这样

我不敢苟同。如果您要配置一个块来调用SVN命令行工具来提交代码,那么这不正是您所要求的吗?可以使用该节点确定修改了哪些文件


现在,尽管您可以这样做,但我也同意@ctcherry的观点,即如果您直接使用它进行生产,这可能会导致中断代码被推送。

听起来您想在Subversion中使用WebDAV进行自动版本控制

我以前使用过这种方法。这很好,因为您可以将其设置为windows/linux网络共享。非技术人员只是将其视为存储文件的网络驱动器。每当用户在那里保存文档/文件时,它都会以静默方式提交


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

在开发者网站上,你可以开发一个工具来支持这个东西,你可以看到下面的代码,下面的代码支持你如何在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;
            }
        }
    }

查看更多信息:从

查看关于程序员的问题:是的,我想我将推动所描述的流程。是的,这似乎是最好的选择。这是我在另一家公司做的事,但后来我被解雇了=)希望设计师们能相信,他们会遵循这一点,将布局的好处。谢谢@ctcherry!