我有这样的目录结构:
.git/
.gitignore
main/
...
tools/
...
...
Run Code Online (Sandbox Code Playgroud)
在主要工具和工具以及任何其他目录中,可以有一个"bin"目录,我想忽略它(我也想忽略它下面的所有内容).我在.gitignore中尝试了这些模式中的每一种,但它们都不起作用:
/**/bin/**/*
/./**/bin/**/*
./**/bin/**/*
**/bin/**/*
*/bin/**/*
bin/**/*
/**/bin/* #and the others with just * at the end too
Run Code Online (Sandbox Code Playgroud)
谁能帮我吗?如果我这样做,第一个模式(我认为应该工作的模式)工作得很好:
/main/**/bin/**/*
Run Code Online (Sandbox Code Playgroud)
但我不希望每个顶级目录都有一个条目,我不想每次添加新目录时都要修改.gitignore.
这是在Windows上使用最新的msysgit.
编辑:还有一件事,有文件和目录在他们的名字中有子字符串'bin',我不希望那些被忽略:)
我知道之前已经问过这个问题,但我还没有看到一个令人满意的答案,或者一个明确的"不,这不可能完成",所以我再问一次!
我想做的就是以独立于平台的方式获取当前运行的可执行文件的路径,作为绝对路径或相对于调用可执行文件的位置.我虽然boost :: filesystem :: initial_path是我的麻烦的答案,但似乎只处理问题的'平台无关'部分 - 它仍然返回调用应用程序的路径.
对于一些背景,这是一个使用Ogre的游戏,我试图使用Very Sleepy进行配置,它从自己的目录运行目标可执行文件,所以当然在加载时游戏找不到配置文件等,并立即崩溃.我希望能够将它传递给配置文件的绝对路径,我知道配置文件将始终与可执行文件一起存在.在Visual Studio中进行调试也是如此 - 我希望能够运行$(TargetPath)而无需设置工作目录.
我的git存储库已经不知何故了 - 我今天早上加载了msysgit而不是在当前目录之后显示的分支名称,它说"((ref:re ...))","git status"将所有内容报告为新文件,'git log'和'git reflog'告诉我"致命:错误的默认修订'HEAD'",依此类推.
做'git reflog --all'或'gitk --all'告诉我存储库的其余部分是完整的,但看起来我正在处理的分支刚刚消失,这解释了为什么HEAD似乎不存在/指向任何事物.
我知道git会抓住各种各样的信息,而且我认为我的提交已经以某种方式成为孤儿,所以是否有一些命令可以向我显示这些提交以便我可以将HEAD重置为它们?
编辑:哦亲爱的.我发现'git fsck'和'git fsck --full'报告"致命:对象03ca4 ......已损坏".我能为此做些什么?
编辑:哦亲爱的亲爱的哦.我检查了另一个分支,然后尝试使用'git checkout -b lostbranchname'重新创建具有相同名称的原始分支,并且git说"错误:无法解析引用引用/ heads/lostbranchname:没有错误,致命:失败锁定ref以进行更新:没有错误"."没有错误"必定是一个特别令人讨厌的错误.所以看起来它仍然在闲逛,但无法使用,无法被杀死.
编辑:超级亲爱的哦亲爱的.我做了一堆解包和重新打包并更换了这里建议的东西:如何恢复因硬盘故障而损坏的Git对象?,但现在我得到另一个报告为腐败的哈希,因为某些东西像'git status'一样无害.我认为整个事情都是有道理的.Git的可爱和所有,但我不应该处理这种事情.
我很难找到关于这个主题的任何好消息.基本上我想找到四元数旋转的分量,即围绕给定轴(不一定是X,Y或Z - 任意单位矢量).有点像将四元数投影到矢量上.因此,如果我要求围绕与四元数轴平行的某个轴进行旋转,我将得到相同的四元数.如果我要求围绕与四元数轴正交的轴旋转,我会得到一个标识四元数.中间......嗯,这就是我想知道如何解决:)
在一些地方,我已经看到了复制和移动构造函数的推荐签名,如下所示:
struct T
{
T();
T(const T& other);
T(T&& other);
};
Run Code Online (Sandbox Code Playgroud)
复制构造函数采用const引用,移动构造函数采用非const rvalue引用.
据我所知,这使我无法在从函数返回const对象时利用移动语义,例如下面的情况:
T generate_t()
{
const T t;
return t;
}
Run Code Online (Sandbox Code Playgroud)
使用VC11 Beta进行测试,T调用复制构造函数,而不是移动构造函数.即使使用return std::move(t);复制构造函数仍然被调用.
我可以看到这是有道理的,因为tconst是不应该绑定的T&&.使用const T&&在移动构造函数签名工作正常,并且是有道理的,但你必须是因为这个问题other是常量,你不能将它的会员空出来,如果他们需要被清零了-当所有的成员都标量它只会工作或者使用正确的签名移动构造函数.
它看起来是确保在一般情况下调用移动构造t函数以便首先创建非const 的唯一方法,但我不喜欢这样做 - 构造事物是好的形式,我不希望客户T要知道他们必须反对这种形式才能提高性能.
所以,我想我的问题是双重的; 首先,移动构造函数应该采用const还是非const rvalue引用?第二:我在这种推理中是对的吗?我应该停止返回const的东西?
我有一个sscanf解决的问题(从字符串中提取东西).我不喜欢sscanf,因为它不是类型安全的,而且是古老而可怕的.我想要聪明并使用C++标准库的一些更现代的部分.我应该用什么呢?
我正在使用静态初始化来简化在C++中使用工厂注册某些类的过程.不幸的是,我认为编译器正在优化"未使用的"对象,这些对象旨在在其构造函数中执行有用的工作.有没有办法告诉编译器不要优化全局变量?
class SomeClass {
public:
SomeClass() {
/* do something useful */
}
};
SomeClass instance;
Run Code Online (Sandbox Code Playgroud)
我在SomeClass的构造函数中的断点没有被击中.在我的实际代码中,SomeClass位于头文件中,实例位于源文件中,或多或少是单独的.
编辑:正如KJAWolf猜测的那样,这段代码实际上被编译成静态库,而不是可执行文件.它的目的是注册静态库提供的一些类型,静态列表类型及其创建者,然后工厂从构造中读取.由于lib提供了这些类型,因此不希望将此代码添加到可执行文件中.
我还发现通过将代码移动到包含其他现有代码的另一个源文件,它可以正常工作.似乎拥有一个纯粹由这些全局对象组成的文件是导致问题的原因.就好像那个翻译单元完全被忽略了一样.
哪个更好:
bool MyClass::someQuery() const;
const bool MyClass::someQuery() const;
Run Code Online (Sandbox Code Playgroud)
我一直在使用'const bool',因为我确信我记得听到它是"什么样做的"(例如比较运营商)但我无法在任何地方找到证据,主要是因为它很难谷歌和Intellisense没有帮助任何人;)任何人都可以确认吗?
对我来说,返回const值(这不仅仅是关于bools)更有意义; 它会阻止临时修改,这几乎总是一个程序员的错误.我只是想要一些东西来支持这一点,所以我可以赞美给我的同事们返回const值:)
如果我有一个我要从一个线程写入并从另一个线程读取的int,我需要使用std::atomic,以确保它的值在内核之间是一致的,无论是否读取和写入它的指令在概念上是原子的.如果不这样做,可能是读取内核的缓存中有旧值,并且不会看到新值.这对我来说很有意义.
如果我有一些无法以原子方式读/写的复杂数据类型,我需要使用一些同步原语来保护对它的访问,例如std::mutex.这将防止对象进入(或被读取)不一致的状态.这对我来说很有意义.
对我来说没有意义的是互斥体如何帮助解决原子解决的缓存问题.它们似乎只是为了防止对某些资源的并发访问,而不是将该资源中包含的任何值传播到其他核心的缓存.是否有一部分他的语义我错过了处理这个?
对于某些情况:我刚刚升级了Ubuntu,这破坏了我现有的gitosis安装(见这里:bug#368895),并刚从包中重新安装了gitosis.我现在想要从旧的gitosis安装中迁移我的整个配置和存储库集(它仍然存在并且可以从中拉出但是否则会被破坏).
我现在在本地有两个gitosis-admin目录,每个gitosis安装一个.一个人有完整的历史,另一个人是空的.我想要了解这段历史.以下是发生的事情:
me@server:~/gitosis-admin-new$ git merge ../gitosis-admin-old/
fatal: '../gitosis-admin-old/' does not point to a commit
Run Code Online (Sandbox Code Playgroud)
...那里是在git仓库~/gitosis-admin-old/和~/gitosis-admin-new/
我可能还需要为其他存储库执行此操作,这些存储库具有更长和更重要的历史记录,因此复制和提交不是一个选项.
我究竟做错了什么?我已经尝试过指向.git/HEAD,据我所知是提交,但这不起作用.有人可以解释如何做到这一点?谢谢!
c++ ×6
git ×3
boost ×1
c++11 ×1
const ×1
executable ×1
git-merge ×1
gitignore ×1
gitosis ×1
mutex ×1
quaternions ×1
return-value ×1
rotation ×1
scanf ×1