背景:我们正在使用 VS 2008,并且正在从 TFS 2005 升级到 2008。
我们有一个包含多个项目的解决方案,并且总体上有数百个代码文件。我们想为所有这些文件添加相同的文本作为评论(版权信息)。有谁知道快速/简单/有效的方法来做到这一点?另外,有没有办法通过 TFS 做到这一点,所以我们没有签出和签入每个文件?
我在 CodeProject 上找到了一些关于创建执行此操作的宏的代码,但是您必须单独打开每个文件,然后在每个文件上运行宏,这是我们希望避免的。
谢谢。
背景:我们正在使用 VS 2008,并且正在从 TFS 2005 升级到 2008。
我们有一个包含多个项目的解决方案,并且总体上有数百个代码文件。我们想为所有这些文件添加相同的文本作为评论(版权信息)。有谁知道快速/简单/有效的方法来做到这一点?另外,有没有办法通过 TFS 做到这一点,所以我们没有签出和签入每个文件?
我在 CodeProject 上找到了一些关于创建执行此操作的宏的代码,但是您必须单独打开每个文件,然后在每个文件上运行宏,这是我们希望避免的。
谢谢。
对于你们来说,编写一个遍历所有目录和所有代码文件(假设 *.cs 等)并将文本添加到顶部的简单程序应该是微不足道的。
构建、测试和运行它应该花费不到 20 分钟的时间。
就 TFS 而言,只需从树的顶部执行 checkout 命令。它将检查源代码控制中的每个文件。完成后,您也可以从顶部签入。
假设 C#,看看 System.IO.Directory.GetDirectories()...
如果您安装了Cygwin,则可以使用以下 Bash 脚本:
# Process all .cpp and .h files under the directory tree at $PROJECTROOT
# To add other file types, add more "-o -name \*.ext" clauses.
# $COPYRIGHTFILE is the file containing your copyright message
COPYRIGHTLENGTH=$(wc -l $COPYRIGHTFILE)
for file in $(find $PROJECTROOT -name \*.cpp -o -name \*.h); do
if diff <(head -n $COPYRIGHTLENGTH $file) $COPYRIGHTFILE; then
(cat $COPYRIGHTFILE; cat $file) > /tmp/file
mv /tmp/file $file
fi
done
这将查找目录树 $PROJECTROOT 下的每个 .cpp 或 .h 文件,将开头与版权消息进行比较,如果不同,则通过临时文件将版权添加到文件中。
免责声明:未经测试,请先测试并自行承担使用风险。
我发布的代码完全符合您在 20 行中尝试完成的任务。
该代码的参考如下:
static void Main(string[] args)
{
string path = "C:\\...TopLevelFolder";
string copyright = "//Copyright © 2011 Rex Cardan, Ph.D";
string[] files = Directory.GetFiles(path, "*.cs", SearchOption.AllDirectories);
foreach (string file in files)
{
if (file.Split('\\')[file.Split('\\').Length-1]!= "AssemblyInfo.cs")
{
using (StreamWriter sw = File.AppendText(file))
{
sw.WriteLine("\r\n");
sw.WriteLine(copyright);
//Normalize Line Endings
sw.WriteLine("\r\n");
}
}
}
}
[我]有没有办法通过 TFS 做到这一点,所以我们没有签出和签入每个文件?
将此更改作为文件更改历史记录的一部分是个好主意。因此,您确实想要签出并签入所有文件。
Kevin Pilch-Bisson 的博客文章“在解决方案中格式化所有 C# 文件”是一个很好的资源。您可以修改该算法以进行编辑。