我一直在阅读和寻找解决方案几天,但没有找到任何适合我的需求。使用SVN(或git)自动提交文件修改?
我们经常更新由设计师和开发人员更新的网站,大多数时候他们不会对SVN进行更改。
我在寻找持续集成类型的解决方案,其中当登台服务器上的“版本化”文件得到更新时,它会自动提交给SVN。
我看过的CruiseControl和其他工具不这样做;有没有一种工具可以实现这个或者我们可以使用的更好的过程?
感谢您的帮助!
Chris
我一直在阅读和寻找解决方案几天,但没有找到任何适合我的需求。使用SVN(或git)自动提交文件修改?
我们经常更新由设计师和开发人员更新的网站,大多数时候他们不会对SVN进行更改。
我在寻找持续集成类型的解决方案,其中当登台服务器上的“版本化”文件得到更新时,它会自动提交给SVN。
我看过的CruiseControl和其他工具不这样做;有没有一种工具可以实现这个或者我们可以使用的更好的过程?
感谢您的帮助!
Chris
我真的很喜欢你说“更好的过程”,因为答案是肯定的。
让你的设计师和每个人都从回购工作。如果你选择SVN或者git或者别的什么都没关系,但是要做到“权威”的副本。这样做最终会让你头痛,因为你可以清楚地记录所有的变化,并且可以随时恢复。
我已经安装了网页设计商店只有环境是一个系统,相反你提出什么样的方式,它的工作原理是这样的:
我希望这可以帮助你考虑一下你的过程。如果你真的不想改变你的过程,你可以设置一个cron,每隔几分钟运行一次,并添加/提交所有已更改的文件,并且应该可以工作。但我不喜欢这样,因为现在你没有有意义的提交信息,而且改变历史也可能没有意义。当人们在工作并保存文件时,他们没有意识到他们正在提交什么内容,因此很可能现在版本库中的修订版本已经处于崩溃状态,现在如何找到未被破坏的修订版本?选择“自动化”提交显然不是最干净的解决方案。
是的,这似乎是最好的选择。这就是我在另一家公司所做的事情,但后来我被贬为了=)希望设计师能够确信遵循这一点,将布局好处。谢谢@ctcherry! – 2011-04-29 05:24:00
我相信(虽然我没有尝试过),你可以为看门狗(http://packages.python.org/watchdog/)写一个观察者,它会为你做提交。
但是,我同意ctcherry,你将得到很多保存在一个破碎的状态。你真的需要改变你的过程。
是的,我想我会推动描述的过程ctcherry。 – 2011-04-29 05:20:36
CruiseControl的和其他工具,我 看着不这样做
我不敢苟同。如果您要配置一个<exec>
块来调用SVN命令行工具来为您提交代码,那么这不会完全符合您的要求吗?您可以使用<filesystem>
节点来确定哪些文件被修改。
现在,尽管你可以这样做,但我也同意@ctcherry的观点,如果你直接用这种方式进行生产,这可能会导致破坏代码。
听起来像你想使用WebDAV在Subversion中进行自动版本更新。 Subversion and WebDAV
我以前使用过这种方法。这是很好的,你可以设置它像一个Windows/Linux网络共享。非技术人员只是将其视为存储文件的网络驱动器。每当用户保存文档/文件时,都会默默承诺。
Git可能有类似的东西,但我没有经验。
谢谢@SuperJames! – 2011-04-29 05:21:37
开发人员网站上,你可以开发支持这件事情一个工具,你可以看到下面的代码,下面的代码支持,你如何让汽车在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
看到这个问题上程序员:[让非程序员参与的简单方法(即设计师)使用版本控制?](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