问题:将具有结构化提交消息的git log的输出解析为对象。
这是此特定目录的日志:
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
int number1,number2, answer;
int x=0 ;
srand(time(NULL));
number1 = rand() % 100 + 1;
number2 = rand() % 100 + 1;
x=number1 + number2;
cout << "What is the " << number1 << " plus " << number2 << " ?" << endl;
cin >> answer;
if (answer!=x)
cout << "No,Please try again.";
else
cout << "Very good!";
cin.clear();
cin.ignore();
cin.get();
return 0;
}
将每个提交解析为具有成员变量commit 7df03ac69f27f80887cc588ab7bec7e38a42d3db
Author: John Doe <johndoe@yahoo.com>
Date: Thu Apr 6 19:43:18 2017 +0200
VAL_A "Something"
VAL_B "Goodbye"
OPTIONALVAL_1 "Hello World \n"
commit 9d9c69f2798778yyuyuu6786767tc7e38a42d3db
Author: John Doe <johndoe@yahoo.com>
Date: Thu Apr 6 19:43:18 2017 +0200
VAL_A "Hello World"
VAL_B "Goodbye World"
OPTIONALVAL_2 "Hello again World \n"
commit 666669f2798778yyuyuu6786767tc7e38a42d3db
Author: John Doe <johndoe@yahoo.com>
Date: Thu Apr 6 19:43:18 2017 +0200
VAL_A "Hello World"
VAL_B "Goodbye World"
,git_commit_hash
,VAL_A
,VAL_B
和OPTIONALVAL_1
的对象。可选值可以为空,但OPTIONALVAL_2
和VAL_A
不能。
我的方法:
VAL_B
。git_commit_hash
和VAL_A
值。VAL_B
和/或OPTIONALVAL_1
,如果是,请保存。 这是一种有效的蛮力方法,但没有灵活性。我想知道是否有人可以指向更优雅的解决方案或c ++或boost库。谢谢。
答案 0 :(得分:2)
你可以使用你自己的git日志格式,使用这样的漂亮格式:
git log --pretty=format:"<your formatting>"
如果您以易于解析的方式放置每个元素(例如,使用您需要的数据定义xml然后使用boost::property_tree
来提取数据),您可以轻松读取文件并准确知道哪些信息在哪里没有解析整个日志。
此主题中的更多信息:Git log output to XML, JSON, or YAML?