小编Nat*_*nst的帖子

删除在远程分支上推送的git提交

我们使用git和GitFlow作为版本控制工具,我遇到的问题是我确信有些人已经遇到过.

在一个功能分支中,一位同事做了一个提交,其中插入了许多无用的文件(所有二进制文件和IDE元数据文件).这个提交被推了.现在这位同事提交了一个pull请求,我不想将所有这些无用的文件集成到develop.

现在,我的git存储库非常庞大,git克隆成为一个漫长而枯燥的过程......

第一个(也是简单的)解决方案是从功能分支中删除这些文件,并在没有这些文件的情况下提交(或执行a revert commit).但是,如果我这样做,我的git存储库将保持相当大,因为对象(文件)将不会从历史记录中删除(因为git仍然知道它们!).

我想要的是"取消"这个提交.

下图显示了我的问题(最顶层的提交是最早的):

git存储库图

如何删除此提交并使我的git克隆再次快速?

PS:感谢GitGraphJS绘制git图形的有用工具!

git

7
推荐指数
1
解决办法
8118
查看次数

boost :: bind与受保护的成员和上下文

在下面的代码中,有两个std::for_each使用boost:bind表达式的"等效"调用.指示的行编译,指示的失败行失败.我能在标准中找到的最佳解释相当于"因为我们这么说".我正在寻找"为什么标准表明这种行为".我的假设在下面.

我的问题很简单:为什么指示的行编译和等效的后续行无法编译(我不想因为"标准这样说",我已经知道 - 我不会接受任何给出这个的答案解释;我想解释标准为何如此说明.

注意:虽然我使用boost,但boost与此问题无关,并且使用g ++ 4.1.*和VC7.1重现了各种格式的错误.

#include <boost/bind.hpp>
#include <iostream>
#include <map>
#include <algorithm>

class Base
{
protected:
        void foo(int i)
        { std::cout << "Base: " << i << std::endl; }
};

struct Derived : public Base
{
        Derived()
        {
                data[0] = 5;
                data[1] = 6;
                data[2] = 7;
        }

        void test()
        {
                // Compiles
                std::for_each(data.begin(), data.end(),
                        boost::bind(&Derived::foo, this,
                                boost::bind(&std::map<int, int>::value_type::second, _1)));

                // Fails to compile - why?
                std::for_each(data.begin(), data.end(),
                        boost::bind(&Base::foo, this,
                                boost::bind(&std::map<int, …
Run Code Online (Sandbox Code Playgroud)

c++

6
推荐指数
1
解决办法
1802
查看次数

使用从Windows上的源代码构建的bzip2来增强iostream

最近,我花了一些时间来研究在Windows上构建的升级版本1.44.0,两个iostream都支持zlib和bzip2压缩过滤器.出于各种原因,决定允许boost从源代码构建zlib和bzip2库.对于它的价值,但我认为不重要,我使用的MSVC版本是VC9(VS2008).另请注意,从我的肤浅检查来看,这个问题应该适用于在Windows上针对bzip2构建的iostreams的任何版本的boost.

通过指定-sZLIB_SOURCE=<PATH>和完全提升构建-sBZIP2_SOURCE=<PATH>.但是,有人注意到boost_iostreams*.dll库取决于libbz2.dll(而不是boost_bzip2*.dll),它不存在.然而,Boost成功构建了boost_bzip2*.dll.请注意,我使用通配符作为所有构建变体信息的占位符.

问题:某处存在对libbz2.dll的硬编码依赖.

c++ windows boost boost-iostreams bzip2

6
推荐指数
1
解决办法
2021
查看次数

在Ubuntu 12.10下链接w/Boost序列化的未解析符号

我首先要说明我今晚感觉自己像个白痴.我试图通过Boost Serialization最低限度地重现我在RHEL5.6,gcc 4.1.2,boost 1.44.0下的工作问题.

我遇到这个问题的环境是Ubuntu Server(安装了dev软件包),gcc 4.7.2,以及boost 1.44.0的版本(针对系统编译器,软件包等).

我的代码编写得很干净,但是我得到了与boost::archive各种类型相关的无数未定义符号.在我的make上运行strace,我看到它接收了预期的boost_serialization库:

668 43569 stat("/usr/local/boost/1.44.0/lib/libboost_serialization.so", {st_mode=S_IFREG|0755, st_size=700481, ...}) = 0
669 43569 open("/usr/local/boost/1.44.0/lib/libboost_serialization.so", O_RDONLY) = 8
Run Code Online (Sandbox Code Playgroud)

我的makefile是:

default: test-app
all: test-app

BOOST := /usr/local/boost/1.44.0

CPPFLAGS := -fPIC -Wall -Wextra -Werror
INCDIRS := -isystem$(BOOST)/include
.LIBDIRS. := $(BOOST)/lib
.LIBS. :=boost_serialization
LIBS := $(foreach lib,$(.LIBS.),-l$(lib))
LIBDIRS := $(foreach dir,$(.LIBDIRS.),-L$(dir))
CPPFLAGS += $(INCDIRS)

base.o : base.cpp base.hpp
        g++ $(CPPFLAGS) --compile $< -o $@ -g

derived.o : derived.cpp base.hpp derived.hpp
        g++ $(CPPFLAGS) --compile $< …
Run Code Online (Sandbox Code Playgroud)

c++ linux linker ld

6
推荐指数
1
解决办法
5078
查看次数

Excel 2013 VSTO功能区和编辑控件

快速概述我有一个Excel AddIn目标Excel 2013.AddIn有一个自定义RibbonUI,其中包含几个包含工作簿特定值的只读EditBox.使用MDI接口,Excel 2007和2010中的相同AddIn工作正常,但使用2013及其SDI接口.

使用简单的VSTO AddIn,我添加了一个带有EditBox的简单RibbonUI.出于测试目的,我只是想让EditBox反映它出现的窗口的Workbook.Fullname.就像我能够找到的那样,RibbonUI是一个单例,并且没有明显的方法来控制每个工作簿/窗口上的任何编辑控件的值.如果我打开2个Excel工作簿并来回切换(更新Excel.Application的ActiveWorkbookChanged属性上的值),则两个工作簿始终反映最新值.更糟糕的是,只有一个事件会触发,但两个窗口都会更新.

问题的关键在于我无法找到一种方法来控制每个窗口/工作簿中编辑控件的值.我在Excel 2013中找到了单文档界面的编程,除了它没有提到,或提供有关如何执行它的任何参考,只需要你.

我稍后会尝试使用一些示例进行更新,但我想知道是否有人在Excel 2013下使用SDI解决了这个问题?很明显,2013年内置的Ribbon控件可以执行此操作(例如,字体设置),但是文档在如何从用户AddIn完成类似操作方面似乎非常稀疏.

c# vsto ribbon excel-2013

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

C++中后缀数组的实现

#include<iostream>
#include<string.h>
#include<utility>
#include<algorithm>

using namespace std;

struct xx
{
    string x;
    short int d;
    int lcp;
};

bool compare(const xx a,const xx b)
{
    return a.x<b.x;
}

int findlcp(string a,string b)
{
    int i=0,j=0,k=0;
    while(i<a.length() && j<b.length())
    {
        if(a[i]==b[j])
        {
            k++;
            i++;
            j++;
        }
        else
        {
            break;
        }
    }
    return k;
}

int main()
{   
    string a="banana";
    xx b[100];
    a=a+'$';
    int len=a.length();
    for(int i=0;i<len;i++)
    {
        b[i].x=a.substr(i);
        b[i].d=i+1;
    }
    sort(b,b+len,compare);
    for(int i=0;i<len;i++)
        cout<<b[i].x<<" "<<b[i].d<<endl;
    b[0].lcp=0;
    b[1].lcp=0;
    for(int i=2;i<len;i++)
    {
        b[i].lcp=findlcp(b[i].x,b[i-1].x); …
Run Code Online (Sandbox Code Playgroud)

c++ time-complexity suffix-array

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

从警报对话框中删除黑色背景 - Android

我正在开发一个 Android 应用程序,在这里我创建了一个自定义对话框,该对话框出现在设备的完整高度上,但我想从顶部和底部留出边距,所以我使用下面的代码设置了边距

  WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
    lp.copyFrom(alertDialog.getWindow().getAttributes());
    lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
    lp.height = Utility.convertDPtoPixel(400, screen);

    alertDialog.show();
    alertDialog.getWindow().setAttributes(lp);
Run Code Online (Sandbox Code Playgroud)

上面的代码运行良好,但对话框出现黑色环境。

这是屏幕截图:

黑色环境下的屏幕截图

现在我想从对话框中删除这些黑色的环境。

下面是对话框的代码:

public void showDialog() {
    AlertDialog.Builder builder;
    final AlertDialog alertDialog;
    //final Dialog alertDialog;
    Context mContext;
    mContext = screen;
    LayoutInflater inflater = (LayoutInflater) LoginActivity.screen.getSystemService(LoginActivity.screen.LAYOUT_INFLATER_SERVICE);
    layout = inflater.inflate(R.layout.countrylist, null);
    LinearLayout rellayout = (LinearLayout) layout.findViewById(R.id.rellayout);

    RelativeLayout closeAcessCodeDialog = (RelativeLayout)layout.findViewById(R.id.closeAcessCodeDialog) ;

    ListView listview = (ListView) layout.findViewById(R.id.listview);
    listview.setAdapter(new CustomAdapter1(LoginActivity.screen, countryList));

    builder = new AlertDialog.Builder(LoginActivity.screen);
    builder.setView(layout);
    alertDialog = builder.create();
    alertDialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);

    WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); …
Run Code Online (Sandbox Code Playgroud)

android dialog android-layout customdialog android-alertdialog

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

从 HTML 执行 shell 脚本

我编写了一个简单的 HTML 代码,提交后它会执行 bash 脚本。该脚本位于正确的文件夹 (cgi-bin) 中。当我在 Firefox 上加载此页面时。它给出的错误为

/somePATH/cgi-bin/script.sh could not be opened because an unknown error occurred.
Run Code Online (Sandbox Code Playgroud)

是脚本权限的问题吗?我努力了:

chmod 777
Run Code Online (Sandbox Code Playgroud)

这是 HTML 代码的一部分。

<form action="cgi-bin/script.sh" method="post">
<input type="submit" value="Call my Shell Script">
</form>
Run Code Online (Sandbox Code Playgroud)

编辑:该脚本基本上只是打印日期:

#!/bin/bash    
# get today's date
OUTPUT=$(date)
# script
echo "Content-type: text/html"
echo ""
echo "<html><head><title>Demo</title></head><body>"
echo "Today is $OUTPUT <br>"
echo "You can do anything with this Schell Script"
echo "</body></html>"
Run Code Online (Sandbox Code Playgroud)

html bash shell

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

带有"readonly"SelectedItems的WPF ListView

这是我的情况:我正在尝试在WPF应用程序中建模的多对多关系,同时编辑关系的一方.情况是我有一组属于零到多组的用户.在编辑用户时,我使用ListViewwith SelectionModeset to Many.用户所属的组在列表视图中标记为选定项.

我的问题是:并非所有用户都有权修改用户的组成员身份.但是,他们应该能够查看它们.到目前为止,并不是一个真正的问题,因为当然,保存更改时会发生权利检查.然而,我想要做的是有效地禁用ListView(至少它能够修改SelectedItems),同时仍然保持其他基本功能(滚动,尤其是,我还在单击标题时实现了排序).这样,用户不会无意中进行他们不允许的更改,然后在他们去保存更改时遇到错误.

目前,如果用户没有足够的权利,我只是完全禁用ListView.但是,正如我所提到的,它有效地禁用了所有其他功能(滚动等),因此从用户体验的角度看是次优的.列表中的项目数(目前为几百个)需要滚动才能查看所有项目.

我已经尝试拦截各种鼠标事件(暂时忽略备用输入访问),并将事件标记为当用户单击ListViewItem并将事件标记为已处理时处理,但ListView仍然修改了选择.

我只是处理SelectionChanged事件而只是恢复以前的状态,但这似乎有点矫枉过正(但是,它可能是最简单易读的解决方案).

有人对如何完成这种行为有任何想法?

wpf wpf-controls

0
推荐指数
1
解决办法
4683
查看次数