在一个小项目的开发过程中,我一直在Windows和Ubuntu上使用Git,经常在两者之间来回翻转.问题是Git Bash一直变慢.
当我说慢时,我的意思是跑步cd需要8到25秒,运行git命令需要5-20秒,ls有时可能需要30秒.毋庸置疑,这并不好玩,更不用说非生产性了.我知道Git在Windows上比较慢,但这太荒谬了.
对我来说暂时工作的一个解决方案是禁用我的网络连接(如本答案所示),启动Git Bash,然后重新连接.有时它会在这样做之后继续快速运行数天,但性能总是最终会降低.我已经在msysgit讨论组,Stack Overflow,msysgit问题列表等中打开和关闭了几个星期,但我还没有找到有效的解决方案.
到目前为止,我已经尝试过:
git gc我确实读到有几个人成功禁用Bash完成,但理想情况下我想保持活跃.msysgit的版本是1.7.3.1-preview20101002,操作系统是Windows 7 x64.可以预见,在Linux上运行相同的东西是快速的.我会专门使用Linux,但我也需要在Windows中运行东西(某些应用程序,测试等).
有没有人遇到类似的问题?如果是这样,那么潜在的问题是什么?解决方案是什么(如果有的话)?
这超出了Git存储库,但仅供参考,我一直使用Git的存储库非常小:最多4-50个文件.
我甚至不确定我是在问正确的问题.让我解释一下我的情况:
这是关于Windows 7上的Git.
我的公司在网络驱动器上设置Windows用户目录,而不是在本地硬盘驱动器上(用于备份和超出此问题范围的其他目的).我不能改变这个政策.
我可以在该方案之外拥有本地文件,这就是我的Apache服务器的设置方式.完全是当地的.
我安装了Git.它安装了Bash.当我启动Bash和cd ~(更改到根目录)时,我发现它(Bash根目录)指向我的网络用户目录.我希望它不要那样做.我想要 ~在我的硬盘上的其他地方.我想要它,以便当我执行其他操作,如安装证书,SSH密钥等时,其默认值不会自动使用该网络目录.
我到处搜索都是徒劳的,我能找到的所有内容都指的是涉及别名,重定向和$ HOME指向的位置的答案.但这根本不是我想要的.
问题是:我可以更改该目录吗?如果是这样的话:怎么样?
更新:所以,$ HOME是我需要修改的.但是我一直无法找到这个神秘的$ HOME变量的位置,所以我认为它是一个Linux系统版本的PATH或其他东西.无论如何 ......
我的确有一个"个人资料"文件git/etc.以下是内容(注意没有$ HOME):
# To the extent possible under law, the author(s) have dedicated all
# copyright and related and neighboring rights to this software to the
# public domain worldwide. This software is distributed without any warranty.
# You should have received a copy of the CC0 Public Domain Dedication along
# with this software.
# If not, see …Run Code Online (Sandbox Code Playgroud) 我最近在Windows 7旗舰版32bit上安装了mingw32的CodeBlocks以消除我的技能,但是这个问题让我有点难过.
我决定发射一个短的Fibonacci发生器,以确保我的设置正常,但我遇到了障碍.
该程序编译,链接和诸如魅力之类的东西,我得到一个相应的可执行文件,按预期运行.
如果我再次尝试编译会出现问题,然后我得到以下内容:
c:/codeblocks/mingw/bin/../lib/gcc/mingw32/4.4.1/../../../../mingw32/bin/ld.exe: cannot open output file bin\Debug\Fibonacci.exe: Permission denied
Run Code Online (Sandbox Code Playgroud)
我甚至无法编辑生成的可执行文件的权限.
我检查了通常的嫌疑人:
现在有趣的是:通常在几分钟之后,mingw32生成的任何可执行文件都会自动消失而没有任何干预.
我在谷歌上搜索了一下,但大多数其他结果要么含糊不清,要么不适用.
我想知道是否有一些Windows 7安全设置对我的.exe有严重破坏,但我不知道Win 7知道从哪里开始搜索.
有人有主意吗?
我需要将/DEF:c:\filepath\myLib.def"命令行选项从bash脚本传递给MS编译器/链接器.该路径是作为构建过程的一部分由bash脚本生成的.基本上,我的脚本的参数通行证是:
-DEF:/c/filepath/myLib.def
Run Code Online (Sandbox Code Playgroud)
MSYS路径转换无法正确处理它,因为它不了解/DEF:部分.如果我这样做的话
-DEF=/c/filepath/myLib.def
Run Code Online (Sandbox Code Playgroud)
但是ms工具不理解这个参数.简而言之,在MSYS bash中编写该参数的正确方法是什么,以便将其转换为正确的参数?
在cygwin上我可以使用cygpath,但没有相应的,因为msys的某些人认为它不需要(即使cygwin的脚本使用cygpath).
我最近安装了GitHub for Windows并且正在使用git bash提示符 - 现在困扰我的一件事是当我输入LS时所有目录都以蓝色列出.
如何更改我的git bash shell,以便在输入LS时,目录以不同的颜色列为蓝色?
我的Windows桌面上有一个四核i7 CPU.我试图让mingw32-make使用尽可能多的内核进行编译.我已将-j8添加到Build Settings-> Build Steps下的"Make Arguments"字段中.mingw32-make似乎完全忽略了该选项,因为我没有从中获得任何速度提升.当我查看任务管理器中的CPU使用率时,它保持在13%,我只看到一个运行g ++的实例.
现在,使用mingw重建整个项目需要3分钟.使用MSVC重建它只需要15秒.
为了您的信息,我在项目设置中启用了预编译的标题选项.这也使VC的事情变得更快.但我仍然没有看到预编译头与mingw的好处.
如果你有从MTCreator并行编译多个源文件的话,请分享你的意见.谢谢!
我已经安装了mingw和msys mingw-get-setup.exe.我还安装了Autotools(autoconf,automake,m4,libtool)C:\/opt/autotools.
当我运行automake时,总会发生以下错误:
configure.ac:11: error: required file './ltmain.sh' not found
Run Code Online (Sandbox Code Playgroud)
如果我ltmain.sh从libtool的已安装树中复制,执行将正常完成.
如何在ltmain.sh不复制的情况下将automake配置为查找?
我写过一本表现不佳的翻译,几周来一直在苦苦挣扎.在下面简单的bechmark
#include<stdio.h>
int main()
{
int x;
char buf[2048];
FILE *test = fopen("test.out", "wb");
setvbuf(test, buf, _IOFBF, sizeof buf);
for(x=0;x<1024*1024; x++)
fprintf(test, "%04d", x);
fclose(test);
return 0
}
Run Code Online (Sandbox Code Playgroud)
我们看到以下结果
bash-3.1$ gcc -O2 -static test.c -o test
bash-3.1$ time ./test
real 0m0.334s
user 0m0.015s
sys 0m0.016s
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,在添加"-std = c99"标志的那一刻,性能崩溃了:
bash-3.1$ gcc -O2 -static -std=c99 test.c -o test
bash-3.1$ time ./test
real 0m2.477s
user 0m0.015s
sys 0m0.000s
Run Code Online (Sandbox Code Playgroud)
我正在使用的编译器是gcc 4.6.2 mingw32.
生成的文件大约是12M,所以这两者之间的差异大约为21MB/s.
运行diff显示生成的文件是相同的.
我认为这与文件锁定有关fprintf,程序大量使用,但我无法找到在C99版本中关闭它的方法.
我尝试flockfile了在程序开始时使用的流,并funlockfile在最后使用了相应的流,但是遇到了关于隐式声明的编译器错误,以及声称对这些函数的未定义引用的链接器错误. …
我无法解释以下程序的行为(在mingw 32位上使用gcc编译).我知道隐式从double转换为int时可能出现的精度损失,但我希望这两种情况能够提供相同的输出,因为它执行完全相同的操作.为什么两个输出不同?
#include <stdio.h>
#include <math.h>
int main()
{
int table[3] = {2, 3, 4};
int i, N;
N = 0;
N += table[0] * pow(100, 0);
N += table[1] * pow(100, 1);
N += table[2] * pow(100, 2);
printf("%d\n", N);
N = 0;
for(i = 0; i < 3; i++)
N += table[i] * pow(100, i);
printf("%d\n", N);
return 0;
}
//output:
40302
40300
Run Code Online (Sandbox Code Playgroud)