我将git用于个人项目,并认为它很棒.它快速,灵活,功能强大,适用于远程开发.
但现在它的工作是强制性的,坦率地说,我们遇到了问题.
开箱即用,git似乎不适用于大型(20多个开发人员)组织的集中开发,开发人员具有不同的能力和git复杂程度 - 特别是与Perforce或Subversion等其他源控制系统相比,针对那种环境.(是的,我知道,Linus从未打算这样做.)
但是 - 出于政治原因 - 我们仍然坚持使用git,即使它很糟糕我们正试图用它做什么.
以下是我们看到的一些事情:
但是,我听说人们在大型开发组织中成功使用git.
如果您处于这种情况 - 或者如果您通常拥有工具,提示和技巧,以便在一个大型组织中使用git变得更容易和更有效率,而某些人不是命令行粉丝 - 我很想听听您有什么建议.
顺便说一句,我已经在LinkedIn上问了这个问题的一个版本,并没有得到真正的答案,但很多"天哪,我也很想知道这一点!"
更新:让我澄清一下......
在我工作的地方,除了git之外我们不能使用任何东西.这不是一个选择.我们坚持下去.我们不能使用mercurial,svn,bitkeeper,Visual Source Safe,ClearCase,PVCS,SCCS,RCS,bazaar,Darcs,monotone,Perforce,Fossil,AccuRev,CVS,甚至是我在1987年使用的Apple的好投影仪.因此,虽然欢迎您讨论其他选项,但如果您不讨论git,您将无法获得赏金.
另外,我正在寻找有关如何在企业中使用git的实用技巧.我在这个问题的顶部列出了我们所遇到的问题清单.同样,欢迎人们讨论理论,但如果你想获得赏金,请给我解决方案.
我在垂直市场的Mac应用程序上工作,该应用程序使用USB加密狗来确保用户付费.它足够昂贵,并且在足够的需求下,"黑帽子"试图破解加密狗方案,因此应用程序在运行时检查可执行文件和关键资源文件,如果某些东西被篡改,程序将无法运行.
随着基于PKI(公钥基础设施)的代码签名在Mac世界中变得越来越普遍,我正在考虑转而使用它来进行运行时验证,这将产生使Gatekeeper高兴的良好副作用.
然而,Apple的兴趣与我的非常不同.他们的重点是让用户满意,因此如果应用程序的签名不正确,Mac OS X将只是询问用户是否要运行它.我的重点是挫败破解者,所以如果我的应用程序签名不正确,我根本不希望它做任何对最终用户有用的事情.
所以我希望我的应用程序能够在运行时使用Apple的签名验证自己的可执行文件和资源.
此外,根据我所读到的提供Mac OS X的库进行验证,他们只是对验证可执行文件的请求给出"是"或"否"的答案.让我感到震惊的是,它很容易受到"黑帽"攻击的影响 - 例如,人们可以简单地将Apple的工具替换为总是说"是的,这是有效的",无论是在系统目录中还是通过改变这些工具的搜索路径.所以我认为在我的应用程序中构建完整的签名验证代码可能是个好主意.
所以我有几个问题:
在此先感谢您的帮助.
我正在编写一个C++类来读取文件中的输入到称为"块"的预分配缓冲区.
我希望调用者能够调用名为GetNextFilledChunk()的公共静态Chunk类方法,该方法
但第2步给了我适合.无论我尝试过什么,尝试访问Chunk实例的私有成员变量/函数会导致g ++ 4.2.1发出错误.
这是头文件中的一个类定义:
class Chunk
{
public:
Chunk();
...
static Chunk* GetNextFilledChunk();
...
private:
...
ssize_t m_ActualTextSize;
};
Run Code Online (Sandbox Code Playgroud)
以下是显示问题的源文件的一部分:
#include "Chunk.h"
Chunk::
Chunk* GetNextFilledChunk()
{
...
theChunk = sInactiveChunks.top();
sInactiveChunks.pop();
...
theChunk->m_ActualTextSize = TextSize(); // PROBLEM IS HERE
...
return theChunk;
}
Run Code Online (Sandbox Code Playgroud)
如图所示,g ++抱怨GetNextFilledChunk()正在尝试访问Chunk的私有成员.
然后我想,也许它需要成为一个"朋友".但是我在头文件中尝试做的所有事情都让GetNextFilledChunk()成为朋友会导致错误.例如:
friend static Chunk*GetNextFilledChunk();
导致"Chunk.h:23:警告:'Chunk*GetNextFilledChunk()'声明为'静态'但从未定义"
我觉得真正奇怪的是,如果我只是让GetNextFilledChunk()一个普通的老功能,而不是一个静态成员函数,我可以"朋友",它和每个人都是幸福的.但这看起来很愚蠢 - 为什么一个人能够从一个无法通过静态成员函数完成的非类函数中在某个类中执行某些操作?
那么...... Chunk的GetNextFilledChunk()函数如何访问Chunk实例的私有成员变量?
如果它无法完成,它是C++的固有部分,还是仅仅是g ++中的错误?
这里与重复符号错误的常见混淆不同...... :-)
我正在Xcode项目中处理一些遗留的Mac代码,这些代码具有相同的全局"跟踪",在几个不同的源文件中定义 - 例如:
很明显,原作者认为他们具有特定于文件的范围,但忽略了将这些行中的任何一行作为"静态"前缀.这很好,很容易修复.
但我有点震惊的是链接器没有标记这些!在我看来,Xcode的链接器(我假设gnu ld)只发出链接到代码段的函数的重复符号警告或错误 - 但不是链接到数据段的全局变量.相反,它会默默地混淆它们,这会导致错误.
那么......我如何说服Xcode为重复的全局变量发出链接错误?或者以其他方式获取此信息,这可能是我构建的常规部分?
在前一段时间处理一些图形代码时,我使用int作为底层坐标持有者编写了Rect和Region类,并且工作正常.Region实现为STL列表的简单类扩展,只包含一个Rects列表.
现在我还需要使用双精度作为底层坐标持有者的同类课程,并决定尝试将其模板化.所以我基本上以"智能方式"将"int"替换为"typename T"并修复了问题.
但是还有一个问题让我难过.我想通过在构成它的所有Rect上进行并集来计算Region的边界框.在没有模板化的情况下工作正常,但是当它被模板化时,g ++会在列表迭代器上产生扼流圈.
这是相关的代码:
// Rect class that always remains normalized
template <typename T>
class KRect
{
public:
// Ctors
KRect(void)
: _l(0), _t(0), _r(0), _b(0)
{
}
void unionRect(const KRect& r)
{
...
}
private:
T _l, _t, _r, _b;
};
// Region class - this is very brain-dead
template <typename T>
class KRegion : public std::list< KRect<T> >
{
public:
...
// Accessors
KRect<T> boundingBox(void)
{
KRect<T> r;
iterator i;
for (i = this->begin(); i != …Run Code Online (Sandbox Code Playgroud) 我正在为Mac程序添加一项功能,以删除其首选项.plist文件,然后重新启动有效的"出厂设置".但是,客户对于使用Sparkle等外部框架持谨慎态度.我在网上查看了示例代码,但其中大部分内容似乎过于复杂(例如,向NSApplication添加一个类别).此外,当您无法使用某些API从非GUI进程启动GUI进程时,其中一些将无法在Lion或更高版本中运行.
那么有一个简单的方法让Mac GUI应用程序重新启动吗?
c++ ×3
macos ×3
xcode ×2
c ×1
code-signing ×1
enterprise ×1
g++ ×1
gcc ×1
git ×1
inheritance ×1
ld ×1
linker ×1
objective-c ×1
pki ×1
relaunch ×1
stl ×1
templates ×1