我在CS部门教授第三个必修课程.我的一项家庭作业要求学生加快他们为以前的作业编写的代码.十倍的加速是常规的; 因素100或1000并非闻所未闻.(对于1000倍的加速,你必须使用malloc()犯下新手错误.)
程序是通过序列改进的小改进.我要求学生记录并描述每个变化以及由此产生的改进.
当你正在改进程序时,也可以打破它.退出不是很好吗?
你可以看到我的目标:我的学生将从版本控制中受益匪浅.但有一些警告:
以下是我对现有系统的评论:
我正在征求关于与初学者一起使用什么源代码控制的建议.我怀疑我们可以找到资源在现有系统上放置薄薄的贴面并简化现有文档.我们可能没有资源来编写新文档.
那么,与合作伙伴一起设置,提交,还原和共享更改真的很容易,但是不必很容易合并或大规模工作?
一个关键的限制是编程对必须能够彼此共享工作,并且只能彼此共享工作,并且每周都会更改对.我们的基础架构是Linux,Solaris和带有netapp文件管理器的Windows.我怀疑我的IT人员想为每对学生创建一个Unix组.我忽略了一个更简单的解决方案吗?
(感谢您接受的答案,由于其对Git Magic的出色参考以及有用的评论而击败了其他人.)
使用纯函数式语言比使用不纯的命令有很多好处,但是低级系统语言通常可以让你获得更高的性能,特别是当它们必不可少时,因为它允许你指定cpu应该如何计算的确切步骤结果.
如果有绝对必须高性能的工具列表,那么我会将VCS放在该列表的顶部,并且git很好地实现了这一点.然而,无论如何,性能不是git唯一优于许多其他类型的版本控制系统的优势.
git团队正在很好地处理不安全的c代码,我从不担心我的类型系统(或其编写语言的任何其他功能),那么为什么有很多haskell开发人员必须使用darcs什么时候才会使用成品?
我想移动一个git repo我必须darcs.我无法找到解释如何做到这一点的文档或项目; 看起来大多数用户都希望走另一条路.另外,能够控制来自darcs的git repo会很酷.
我想编写一个Haskell程序来查询有关darcs存储库的信息.我宁愿直接使用darcs库,而不是调用darcs可执行文件并解析结果.它说成是 "正在进行很多工作",并以"缺乏一个稳定的API",但似乎可用.
我想我可以通过研究darcsden源代码来回答我的问题,例如,从这个模块开始,但我认为,如果知识渊博的人提供评论性的介绍来补充这样的研究,它不仅对我有用.
所以,这是一个具体的例子.
如何为给定文件计算影响它的最新补丁以及补丁的日期,作者和名称?如果您解释解决方案中使用的密钥库函数,那将非常有用.
编辑:
以下是对不熟悉darc源代码的人可能不太明显的一些评论.我从Jason Dagit的硕士论文中学到了它们,并希望它们有助于理解Ganesh给出的答案.
在Darcs中,补丁具有前置和后置上下文,表示应用补丁之前和之后的存储库状态.在源代码中,这些上下文使用关于补丁类型的幻像类型进行建模.这些幻像类型被称为见证,seal2用于摆脱它们.
在补丁列表中,只有第一个前上下文和最后一个上下文在类型中表示.使用存在类型隐藏所有其他上下文.Darcs定义了前向列表(称为FL)和反向列表(称为RL).反向列表以反向(按时间顺序)顺序存储补丁(由darcs完成的模补丁重新排序).反向列表可用于访问头部位置的最新补丁.名称中包含RL的所有函数都在此类反向列表上创建或操作.
最近我发现项目git2html:git2html是一个简单的git web界面.与其他Web界面不同,git2html不会动态生成内容:它不会使用CGI脚本,而是生成静态HTML页面.
我的问题很简单.你知道Git,Mercurial或Darcs的其他项目有类似的目标吗?我对这些DVCS的静态Web前端感兴趣,但如果你想为不同的开源DVCS评论其他项目,这是公平的.
我正在尝试建立一个git存储库的darcs镜像.我有一些工作正常,但有一个重大问题:如果我将一大堆提交推送到git repo,那些提交将合并到一个darcs补丁集中.我真的想确保每个git commit都设置为单个darcs补丁集.我敢打赌这可能是通过某种方式git fetch跟踪审查远程分支的本地副本,但我的git fu不能胜任这项工作.
这是我现在使用的(ksh)代码,或多或少:
git pull -v # pulls all the commits from remote --- bad!
# gets information about only the last commit pulled -- bad!
author="$(git log HEAD^..HEAD --pretty=format:"%an <%ae>")"
logfile=$(mktemp)
git log HEAD^..HEAD --pretty=format:"%s%n%b%n" > $logfile
# add all new files to darcs and record a patchset. this part is OK
darcs add -q --umask=0002 -r .
darcs record -a -A "$author" --logfile="$logfile"
darcs push -a
rm -f $logfile
Run Code Online (Sandbox Code Playgroud)
我的想法是
git fetch …我想要一个简单的CI用于小型开发设置.两个动机 - 完整的构建需要一些时间,预期的测试套件也需要一些时间.我真的不想一头扎进需要一个java应用程序容器的大玩家之一,或者用什么来显示多种颜色的花式图等等.我会特别感兴趣的是"文化上的"Haskellish - 最好是命令行交互或配置文件,与Darcs互操作是绝对必须的.
是否存在任何此类工具,或者我是一个大玩家还是自己编写?
说到这一点,我记得有一个为GHC设立的建设农场.看一下,我注意到它曾经使用过buildbot,现在使用自定义构建器.虽然这些是针对不同的工作流程设置的,但它们中的任何一个都是更简单,更直接的解决方案吗?
编辑:我现在要使用buildbot.将更新它的工作原理.
编辑2:Ben Lippmeier已将buildbox置于hackage上,这似乎也是本机Haskell CI解决方案的基础.它目前未被记录,可能不是完全满足我的需求,但它是:http://hackage.haskell.org/package/buildbox.他用它来编写一个用于修复的buildbot:http://code.haskell.org/repa/repa-head/repa-bot/ .
所以,只是想知道darcs是否有与git的子模块相同的东西.
也就是说我有一个回购(myapp),我有一个名为mylibrary的文件夹.mylibrary与myapp的开发没有任何关系,只需要包含它.mylibrary的开发发生在它自己的回购中,但当有人拉动myapp时,它也会提供最新版本的mylibrary.有任何想法吗?
由于链接器问题,似乎不可能将Yesod与Darcs库一起使用.我追踪了这个问题,并需要熟悉Darcs内部人员的提示来解决这个问题.
GHCi runtime linker: fatal error: I found a duplicate definition for symbol
sha256_init
whilst processing object file
/home/sebfisch/.cabal/lib/darcs-2.9.5/ghc-7.4.2/libHSdarcs-2.9.5.a
This could be caused by:
* Loading two different object files which export the same symbol
* Specifying the same object file twice on the GHCi command line
* An incorrect `package.conf' entry, causing some object to be
loaded twice.
GHCi cannot safely continue in this situation. Exiting now. Sorry.
Run Code Online (Sandbox Code Playgroud)
它似乎是由darcs和cryptohash库暴露相同的符号引起的,因为搜索相应的目标文件会显示:
# for file …Run Code Online (Sandbox Code Playgroud) 看到darcs以纯文本格式发生变化我感觉不太舒服,所以我一直在寻找一种工具来展示对变化的并排比较.
对于whatsnew我可以使用meld,但是当我需要看到已记录的更改时,它不会那么容易.我已经读过,它diffuse允许比较不同的版本,但我无法让它工作.
我试过了
diffuse -r HEAD^1 -r HEAD^2 myfile.py
Run Code Online (Sandbox Code Playgroud)
但它失败了(我认为修订命名是针对git的),那么有人知道如何看到darcs的最新变化吗?
建议其他工具完成工作(并且不需要优先设置Web服务器),这是值得欢迎的.