我一直在使用git-subtree扩展(https://github.com/apenwarr/git-subtree)来管理我们主项目中的子项目.当我尝试从主项目中拆分对子项目所做的更改时,它正在完成我想要的事情.
比如早些时候我做过
git subtree add -P Some/Sub/Dir --squash git@gitserver:lib.git master
Run Code Online (Sandbox Code Playgroud)
将库代码引入我们主项目中的Some/Sub/Dir.这里的一切都很棒,所以我把我的更改推到了我们的中央主要项目裸git repo.然后我决定在Some/Sub/Dir中更改我的本地版本的lib,提交它,然后将其拆分以将其推回到lib.git repo
git subtree split -P Some/Sub/Dir -b some_branch
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作.不再需要repo的本地副本我删除了它.
从我们的中央仓库克隆了一个新的repo副本后,我对Some/Sub/Dir中的lib进行了一些更改,并决定将这些更改拆分出来并将它们推回到lib.git存储库.我尝试使用与以前相同的子树分割命令,但这次我最终得到以下输出:
1/ 3 (0)
2/ 3 (1)
3/ 3 (1)
fatal: bad object d76a03f0ec7e20724bcfa253e6a03683211a7bb1
Run Code Online (Sandbox Code Playgroud)
d76a03f0ec7e20724bcfa253e6a03683211a7bb1来自我添加子树时:
commit 43b3eb7d69d5eb64241eddb12e5bd74fd0215083
Author: Ian Bond <ibond@onezero.com>
Date: Fri Apr 22 15:06:50 2011 -0400
Squashed 'Subtree/librepoLib/' content from commit d76a03f
git-subtree-dir: Subtree/librepoLib
git-subtree-split: d76a03f0ec7e20724bcfa253e6a03683211a7bb1
Run Code Online (Sandbox Code Playgroud)
实际上是指lib.git repo中的提交.
我能够拼凑起来(我是一个git noob所以我可能错了,忽略了一些东西,或者在这里使用了不正确的术语),'git subtree add --squash'将带来整个历史远程lib.git repo进入当前仓库,将其压缩到单独的提交中,然后将该提交添加到工作分支中.lib.git提交历史记录保留在当前的repo中,但是它们是悬空提交,因为除了通过压缩提交的文本之外它们实际上没有被引用.只要那些悬空提交仍然存在,git-subtree就可以使用它们来执行拆分,但是由于推或拉不包含悬空对象(或者如果我运行gc并完全修剪悬空对象),那些悬空提交将丢失并且git-subtree不再具有执行拆分所需的信息.
我添加了一个脚本,可以完全重现我一直存在的问题.
我的问题是:
1)我可以做些什么来处理我现在有子树的现有情况,我想要合并回原始仓库,但不再有任何将它们链接在一起的历史记录.我目前的想法是做一些像:
git subtree split -P Some/Sub/Dir …Run Code Online (Sandbox Code Playgroud) 我在C++工作.
我想用sprintf编写一个可能很长的格式化字符串(特别是像_snprintf_s这样的安全计数版本,但想法是一样的).在编译时大致的长度是未知的,所以我将不得不使用一些动态分配的内存而不是依赖一个大的静态缓冲区.有没有办法确定特定sprintf调用需要多少个字符,所以我总能确定我有足够大的缓冲区?
我的后备是我只需要格式字符串的长度,加倍它,并尝试.如果它工作,很好,如果不是,我只会加倍缓冲区的大小,然后再试一次.重复直到它适合.不完全是最聪明的解决方案.
看起来C99支持将NULL传递给snprintf来获取长度.我想我可以创建一个模块来包装该功能,如果没有别的,但我对这个想法不是很疯狂.
也许对"/ dev/null"/"nul"的fprintf可能会起作用吗?还有其他想法吗?
编辑:或者,是否有任何方法可以"spunk"sprintf所以它在中间写入?如果可能的话,它可以填充缓冲区,处理它,然后从它停止的地方开始重新填充.
我正在尝试创建一个布局完全由数据驱动的表单.
示例数据源:
{
title : "Form Test",
fields : [{
name : "FieldA",
type : "string",
value : "initial value"
}, {
name : "FieldB",
type : "selection",
options : ["1", "2", "3"],
value : "2"
}, {
name : "FieldC",
type : "struct",
value :
[{
name : "FieldC1",
type : "string",
value : "initial value"
}, {
name : "FieldC2",
type : "string",
value : "initial value"
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我认为可以使用ng-repeat和ng-switch来选择表单元素,具体取决于'类型',但是当我到达'FieldC'时,我会在执行此操作时遇到困难.
<span ng-switch on="field.type">
<div ng-switch-when="string">STRING: …Run Code Online (Sandbox Code Playgroud) 有谁知道为什么这不会编译?我已经尝试了VS 2008和GCC 4.something并且都吐出了错误.无论我是否引用"ThisFunctionDoesNotCompile()"都无关紧要.
我可以通过将'InternalType'作为第二个模板参数传递给Base来解决这个问题,但我仍然很好奇为什么会出现这个错误.
#include <iostream>
using namespace std;
class DataClass
{
public:
int m_data;
};
template<typename DerivedType>
class Base
{
public:
int ThisFunctionCompiles()
{
// No problems here.
typename DerivedType::InternalType temp;
temp.m_data = 5;
return temp.m_data;
}
// error C2039: 'InternalType' : is not a member of 'Derived<InInternalType>'
typename DerivedType::InternalType ThisFunctionDoesNotCompile()
{
return static_cast<DerivedType*>(this)->GetInternalData();
}
};
template<typename InInternalType>
class Derived : public Base<Derived<InInternalType> >
{
public:
typedef InInternalType InternalType;
InternalType GetInternalData()
{
return m_internalData;
}
private:
InternalType m_internalData;
public: …Run Code Online (Sandbox Code Playgroud) 编辑:我的问题的简短回答是,我对SFINAE可以做什么有错误的看法,而且根本没有检查函数体:sfinae是否实例化了一个函数体?
我有一个与此类似的问题:是否可以编写模板来检查函数的存在?
不同之处在于我不仅想检查函数是否存在,而且我还想知道它是否真的会通过SFINAE.这是我想要完成的一个例子:
struct A
{
void FuncA() { std::cout << "A::FuncA" << std::endl; }
};
struct B
{
void FuncA() { std::cout << "B::FuncA" << std::endl; }
void FuncB() { std::cout << "B::FuncB" << std::endl; }
};
template<typename T>
struct Inter
{
void FuncA() { t.FuncA(); }
void FuncB() { t.FuncB(); }
T t;
};
// Always takes some sort of Inter<T>.
template<typename InterType>
struct Final
{
void CallFuncs()
{
// if( t.FuncA() exists and can …Run Code Online (Sandbox Code Playgroud) 在我们的git repo中,我们意外地提交了删除所有文件的提交.这个提交被推送到我们的中央服务器,并被其他开发人员和构建服务器拆除,因此重写历史记录以撤消这个并不理想.相反,我们进行了另一次回滚提交,将所有文件恢复到之前的状态,另一次尝试回滚提交,以某种方式只恢复了一些文件.
cc043989 Rollback commit (goes back to 4bf31def)
f5d7f10e Failed rollback commit
cd60376f Delete all files commit
4bf31def Last good commit
.
.
.
Run Code Online (Sandbox Code Playgroud)
我们关注的是这是否会产生任何长期影响,特别是关于与特征分支和/或从子树回购合并的问题.如果将来不断进行合并或其他更具挑战性的事情,可能值得重写历史记录并手动处理构建服务器/其他开发人员回购.