小编anr*_*r78的帖子

修复因大二进制文件而变慢的git repo

我们有一个包含源代码和二进制文件的git repo.裸仓库现已达到约9GB,克隆它需要很长时间.大部分时间都花在"远程:压缩对象"上.在使用其中一个较大的二进制文件的新版本提交之后,获取需要很长时间,也会花费在服务器上压缩对象.

没有远程压缩对象的情况下阅读git pull之后,我怀疑二进制文件的delta压缩也会伤害我们,但我并不是100%肯定如何解决这个问题.

在服务器上修复裸仓库的确切步骤是什么?我猜:

  • 为我想要的所有扩展名添加像'*.zip -delta'这样的条目.git/info/attributes
  • 运行'git repack',但有什么选择?-adF会重新打包所有内容,并给我一个repo,其中没有对指定的文件类型进行增量压缩吗?
  • 运行'git prune'.我以为这是自动完成的,但是当我玩这个repo的裸克隆时,运行它会减小~2GB的大小
  • 克隆repo,添加并提交一个.gitattributes,其条目与我在裸仓库中的.git/info/attributes中添加的条目相同

我有事吗?

更新:

对此有一些有趣的测试结果.今天我开始对有问题的回购进行了简单的克隆.我们不那么强大的4GB内存服务器耗尽内存并开始交换.3个小时后我放弃了......

然后我从我最新的工作副本中克隆了一份裸露的回购.在工作站之间克隆一个大约需要5分钟.然后我把它作为一个新的回购推送到服务器.克隆那个回购仅用了7分钟.

如果我正确地解释了这一点,即使没有禁用二进制文件的增量压缩,更好的压缩仓库也会表现得更好.我想这意味着上面的步骤确实是我想在短期内做的事情,但另外我需要找出如何限制git被允许用于服务器上的打包/压缩的内存量,这样我就可以避免了交换.

如果重要:服务器运行git 1.7.0.4,工作站运行1.7.9.5.

更新2:

我在testrepo上做了以下步骤,并认为我有机会在服务器上执行它们(备份后)

  • 打包对象时限制内存使用量

    git config pack.windowMemory 100m
    git config pack.packSizeLimit 200m

  • 禁用某些扩展的增量压缩

    echo'*.tar.gz -delta'>> info/attributes
    echo'*.tar.bz2 -delta'>> info/attributes
    echo'*.bin -delta'>> info/attributes
    echo'*.png -delta '>> info/attributes

  • 重新包装存储库并收集垃圾

    git repack -a -d -F --window-memory 100m - max-pack-size 200m
    git gc

更新3:

此操作后出现一些意外的副作用:尝试重新打包git repo以提高性能后出现问题

git

19
推荐指数
2
解决办法
1万
查看次数

为什么git会在每次推送回购时自动打包?

最近几天,每次推送到我们的git存储库都导致了服务器上的自动打包.

发生这种情况时客户端上的输出:

~pdr git:master ??? git push origin master
Counting objects: 44, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (26/26), done.
Writing objects: 100% (27/27), 4.67 KiB, done.
Total 27 (delta 14), reused 0 (delta 0)
Auto packing the repository for optimum performance.
Run Code Online (Sandbox Code Playgroud)

打包发生在服务器上,ps显示这些git命令在工作:

git      23252  0.0  0.0  68520   552 ?        S    15:21   0:00 sshd: git@notty  
git      23253  0.0  0.0   9660   540 ?        Ss   15:21   0:00 git shell -c git-receive-pack 'repositories/pdr.git'
git      23254  0.0  0.0  16644 …
Run Code Online (Sandbox Code Playgroud)

git

15
推荐指数
1
解决办法
6048
查看次数

Emacs的/ CEDET.多个项目和代码完成

我已经使用CEDET 1.0和ECB 2.40设置了emacs 23.1.50.1(受到Alex Otts设置的极大启发,位于http://github.com/alexott/emacs-configs/blob/master/rc/emacs-rc-cedet.el和他对Cedet的热情介绍(http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html),谢谢Alex).它工作得很好,但我需要更多地了解在处理多个项目时如何处理代码完成和符号引用.

我创建了一个简单的ede项目,如下所示:

(ede-cpp-root-project "test"
                      :file "~/src/sw/anchor"
                      :include-path '("/Common")
                      :system-include-path '("~/include"))
Run Code Online (Sandbox Code Playgroud)

加载此项目时,Semantic是否仅在项目配置中指定的各个目录中查找完成?

我按照http://mmmyddd.freeshell.net/blog/Computer/Emacs/usecscopesemanticdbbackend使用cscope作为semanticdb的后端.我可以在没有emacs抛出任何错误的情况下运行semanticdb-enable-cscope-in​​-buffer,但我不知道语义是否使用了我的数据库.我是否可以在项目定义中添加对cscope.out的引用,以便更好地控制在当前上下文中搜索引用的文件?

有几个古怪的东西:

当我尝试打开一个新的源文件时,我收到错误"apply:Searching for program:no such file or directory,global",没有任何反应.如果我再试一次,一切都很好.

当我尝试通过指向锚文件加载项目时,我收到此错误:"if:Wrong type argument:class-p,ede-cpp-root"

emacs cscope cedet emacs-semantic

8
推荐指数
1
解决办法
3075
查看次数

尝试重新打包git repo以提高性能后的问题

不久之前,我发布了一个问题,要求就修复由于大量二进制文件很慢的仓库的计划提供反馈.这个问题(不是必须阅读的):修复因大二进制文件而变慢的git仓库

我遵循了我的计划,并经历了意想不到的副作用.

我们回购的新鲜克隆最初需要2-3个小时.想通了服务器开始交换,在完成git config pack.windowMemory 100m && git config pack.packSizeLimit 200m后,克隆时间下降到~15分钟.

我想我仍然会完成其余的计划,所以我为我们拥有的二进制类型禁用了delta compresson,并在repo上运行了git repack -a -d -F.

在此之后,回购的新鲜克隆需要大约20分钟,所以它实际上变得更糟.但真正的问题是每次有人已经克隆了repo尝试推送提交时,他们会"自动打包存储库以获得最佳性能".

关于可能出错的问题,以及如何/应该修复的想法?

git

8
推荐指数
1
解决办法
2207
查看次数

将源文件列表导入Eclipse项目

我们有一个顶级目录,其中包含许多不同项目的代码.我想创建一个Eclipse CDT项目,它只包含处理和编译特定项目所需的源代码.之前我使用过SlickEdit,在那里我只能导入一个源和标题列表.是否有可能在Eclipse中实现类似的功能?

c eclipse eclipse-cdt

5
推荐指数
1
解决办法
3360
查看次数

Qt:使用 QListView 和 QFileSystemModel 浏览文件系统。如何突出显示文件夹中的第一项?

我在没有键盘/鼠标的系统上做主题所说的事情,所以我需要“从代码”完成这项工作。当我更改 QListView 的 RootIndex 时,我想突出显示第一行。

这是我制作的一个小型测试项目中的 mainwindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QEvent>
#include <QKeyEvent>
#include <QDebug>
#include <QTimer>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    model = new QFileSystemModel;
    model->setRootPath("/Users/anders/Downloads/Browser");

    listView = new QListView;
    listView->setModel(model);
    listView->show();

    QTimer::singleShot(2000, this, SLOT(LightItUp1()));

}

void MainWindow::LightItUp1()
{
    qDebug("LightItUp1");
    listView->setRootIndex(model->index("/Users/anders/Downloads"));
    listView->setCurrentIndex(model->index(0, 0, listView->rootIndex()));

    QTimer::singleShot(2000, this, SLOT(LightItUp2()));
}

void MainWindow::LightItUp2()
{
    qDebug("LightItUp2");
    listView->setRootIndex(model->index("/Users/anders/Downloads/Browser"));
    listView->setCurrentIndex(model->index(0, 0, listView->rootIndex()));

    QTimer::singleShot(2000, this, SLOT(LightItUp3()));
}


void MainWindow::LightItUp3()
{
    qDebug("LightItUp3");
    listView->setRootIndex(model->index("/Users/anders/Downloads"));
    listView->setCurrentIndex(model->index(0, 0, listView->rootIndex()));

    QTimer::singleShot(2000, this, SLOT(LightItUp4()));
}


void MainWindow::LightItUp4() …
Run Code Online (Sandbox Code Playgroud)

qt qlistview qfilesystemmodel

5
推荐指数
1
解决办法
1万
查看次数

以编程方式更改主显示分辨率

我正在尝试更改 Android 8.1 上主显示器的显示分辨率。我从内核收到一个事件(基于 EDID),告诉我需要更改模式。

然后我基本上做:

sp<IBinder> display(SurfaceComposerClient::getBuiltInDisplay(ISurfaceComposer::eDisplayIdMain));
status_t res = SurfaceComposerClient::setActiveConfig(display, new_mode);
Run Code Online (Sandbox Code Playgroud)

这会正确更新 SurfaceFlinger、显示 hal 和内核,但 windowmanager/display 不会更改分辨率,直到我运行:

wm size 1920x1080
wm density 240
Run Code Online (Sandbox Code Playgroud)

但是 wm 调用这些函数,这看起来有点太苛刻了,并且还将尺寸/密度存储在持久设置中:

public void setForcedDisplaySize(int displayId, int width, int height);
public void setForcedDisplayDensityForUser(int displayId, int density, int userId);
Run Code Online (Sandbox Code Playgroud)

我一直在查看 windowmanager/display 中的代码,但没有找到我应该用于此目的的 API。

有没有办法通知 windowmanager/display 有关 surfaceflinger 的更改,或者我错过了可以使用的 API?

我是否以错误的方式处理这个问题?有没有一种正确的方法可以改变主显示器的分辨率/模式,但我还没有找到?

android android-windowmanager surfaceflinger android-displaymanager

5
推荐指数
0
解决办法
868
查看次数

使用 Repo 创建本地分支

我们已经开始使用 Repo(此处描述: https: //source.android.com/source/developing.html)来管理我们的 git 存储库集。完成初始化和同步后,所有存储库都已分离 HEAD。

当存储库的清单版本是一个分支时,我想为清单中的所有 git 存储库自动创建一个跟踪远程分支的本地分支。那可能吗?

git repo

4
推荐指数
1
解决办法
2655
查看次数