使用SVN(或git)修改文件时自动提交?
几天来,我一直在阅读和寻找解决方案,但没有找到任何适合我需要的 我们经常更新由设计师和开发人员更新的站点,这些站点在大多数情况下不会将其更改提交给SVN 我正在研究持续集成类型的解决方案,其中,当登台服务器上的“版本连接”文件得到更新时,它会自动提交给SVN CruiseControl和我看过的其他工具都不能做到这一点;有没有一个工具可以做到这一点,或者我们可以使用一个更好的过程 谢谢你的帮助使用SVN(或git)修改文件时自动提交?,svn,git,continuous-integration,Svn,Git,Continuous Integration,几天来,我一直在阅读和寻找解决方案,但没有找到任何适合我需要的 我们经常更新由设计师和开发人员更新的站点,这些站点在大多数情况下不会将其更改提交给SVN 我正在研究持续集成类型的解决方案,其中,当登台服务器上的“版本连接”文件得到更新时,它会自动提交给SVN CruiseControl和我看过的其他工具都不能做到这一点;有没有一个工具可以做到这一点,或者我们可以使用一个更好的过程 谢谢你的帮助 克里斯我真的很喜欢你说的“更好的流程”,因为答案是肯定的 让你的设计师和每个人都在回购协议中工作。选择
克里斯我真的很喜欢你说的“更好的流程”,因为答案是肯定的 让你的设计师和每个人都在回购协议中工作。选择SVN、git或其他东西并不重要,但要使其成为“权威”副本。这样做最终会省去你的麻烦,因为你会有一个清晰的所有更改的历史记录,并且可以随时恢复 我为网页设计商店设置一些环境的方式是使用与您建议的系统相反的系统,其工作原理如下:
- 所有设计师都会检查站点的副本,并根据需要进行更改和提交/更新
- 提交时,存储库将站点的副本推送到一个临时服务器,该服务器的配置几乎与生产服务器相同
- 如果站点正在进行登台,那么很有可能它会在实时服务器上工作
- 准备就绪后,可以将登台服务器上的站点副本复制到live,现在您已经以非常负责任的方式更新了站点,并且拥有了所有更改的历史记录。(为此,我喜欢使用rsync,您可以让它以您认为合适的方式工作)
现在,尽管您可以这样做,但我也同意@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!