我们有一个包含源代码和二进制文件的git repo.裸仓库现已达到约9GB,克隆它需要很长时间.大部分时间都花在"远程:压缩对象"上.在使用其中一个较大的二进制文件的新版本提交之后,获取需要很长时间,也会花费在服务器上压缩对象.
在没有远程压缩对象的情况下阅读git pull之后,我怀疑二进制文件的delta压缩也会伤害我们,但我并不是100%肯定如何解决这个问题.
在服务器上修复裸仓库的确切步骤是什么?我猜:
我有事吗?
更新:
对此有一些有趣的测试结果.今天我开始对有问题的回购进行了简单的克隆.我们不那么强大的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存储库都导致了服务器上的自动打包.
发生这种情况时客户端上的输出:
~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) 我已经使用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"
不久之前,我发布了一个问题,要求就修复由于大量二进制文件很慢的仓库的计划提供反馈.这个问题(不是必须阅读的):修复因大二进制文件而变慢的git仓库
我遵循了我的计划,并经历了意想不到的副作用.
我们回购的新鲜克隆最初需要2-3个小时.想通了服务器开始交换,在完成git config pack.windowMemory 100m && git config pack.packSizeLimit 200m后,克隆时间下降到~15分钟.
我想我仍然会完成其余的计划,所以我为我们拥有的二进制类型禁用了delta compresson,并在repo上运行了git repack -a -d -F.
在此之后,回购的新鲜克隆需要大约20分钟,所以它实际上变得更糟.但真正的问题是每次有人已经克隆了repo尝试推送提交时,他们会"自动打包存储库以获得最佳性能".
关于可能出错的问题,以及如何/应该修复的想法?
我们有一个顶级目录,其中包含许多不同项目的代码.我想创建一个Eclipse CDT项目,它只包含处理和编译特定项目所需的源代码.之前我使用过SlickEdit,在那里我只能导入一个源和标题列表.是否有可能在Eclipse中实现类似的功能?
我在没有键盘/鼠标的系统上做主题所说的事情,所以我需要“从代码”完成这项工作。当我更改 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) 我正在尝试更改 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
我们已经开始使用 Repo(此处描述: https: //source.android.com/source/developing.html)来管理我们的 git 存储库集。完成初始化和同步后,所有存储库都已分离 HEAD。
当存储库的清单版本是一个分支时,我想为清单中的所有 git 存储库自动创建一个跟踪远程分支的本地分支。那可能吗?