小编Dav*_*bbo的帖子

为多个github项目使用相同的部署密钥

Github不允许将相同的ssh部署密钥用于多个项目,这在某些情况下非常有用(例如,CI服务器处理具有私有子模块的项目).我已经看到各种各样的线索似乎都说这种限制是出于"安全原因",但我还没有看到一个令人信服的解释,确切地说会产生什么样的风险.

请注意,Github不允许重用帐户级别密钥的事实是有道理的(两个用户不应共享密钥).这只是我正在质疑的部署密钥的限制.

为了清楚起见,我不是在寻找变通方法(创建一个虚拟用户,使用多个密钥......),但仅仅是为了解释部署密钥上的这种限制.

相关主题:

git ssh github

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

转义基本身份验证URL中的用户名字符

使用http基本身份验证时,用户名可以在URL中传递,例如

http://david@foo.com/path/
Run Code Online (Sandbox Code Playgroud)

但现在假设用户名是电子邮件地址,例如david@company.com.这样做显然含糊不清:

http://david@company.com@foo.com/path/
Run Code Online (Sandbox Code Playgroud)

有没有办法逃脱用户名中的@字符?我尝试过标准的URL编码:

http://david%40company.com@foo.com/path/
Run Code Online (Sandbox Code Playgroud)

但那没有做到.

http basic-authentication

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

生成链接时如何忽略当前路由值?

这个问题类似于asp.net mvc Html.ActionLink()保留我不想要的路由值,但有一个扭曲,使它更复杂.

从默认的新MVC3应用程序开始,我将路由更改为:

routes.MapRoute(
    "r1", // Route name
    "{controller}/{id}/{action}"
);

routes.MapRoute(
    "r2", // Route name
    "{controller}/{action}"
);
Run Code Online (Sandbox Code Playgroud)

请注意,id位于第一个操作之前.

然后在Home\Index.cshtml中,我添加:

@Url.Action("Index")
@Url.Action("Index", new { id = "blah" })
@Url.Action("Index", new { id = "" })
Run Code Online (Sandbox Code Playgroud)

现在我导航到/ Home/Foo/Index并查看3个生成的链接.我明白了

  1. "/首页/美孚/索引"
  2. "/首页/胡说/索引"
  3. "/首页/指数?ID =富"

前两个是有道理的,并且正在使用第一条路线.

但是在第三个链接中,遇到第二个路径,我不明白为什么id = Foo传递给查询字符串,因为我明确地传递了一个空id.我希望它只生成"/ Home/Index".

任何人都可以解释这一点,并建议我如何让它不显示?

c# asp.net-mvc asp.net-mvc-routing

15
推荐指数
3
解决办法
2458
查看次数

动态获取动态对象的值

是的,标题听起来有点令人困惑,所以我会解释我的意思:假设你有一个C#4.0'动态'对象,以及一个属性的名称.你将如何从动态对象中检索该属性?

换句话说,你将如何实现:

public static object GetDynamicValue(dynamic o, string name) { ... }
Run Code Online (Sandbox Code Playgroud)

另一种说法是我试图将动态对象视为IDictionary.

请注意,这里反射可能不是一个选项,因为动态对象可能是一个不基于反射的自定义实现(例如,通过扩展DynamicObject并做自己的事情).

c# dynamic c#-4.0

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

git union merge带回一些删除的行

我试图通过git union merge来理解一个令人费解的行为.要重新启动,请从具有以下内容的hello.txt开始:

1
2
3
Run Code Online (Sandbox Code Playgroud)

在另一个提交中,添加一行,例如

1
2
new
3
Run Code Online (Sandbox Code Playgroud)

foo原始提交的不同分支中,删除中间行:

1
3
Run Code Online (Sandbox Code Playgroud)

在这里,我希望合并不包含已删除的行,即使使用union merge也是如此.但是我看到它包含(git merge foo在主人身上跑完之后):

1
2
new
3
Run Code Online (Sandbox Code Playgroud)

所以它忽略了我的行删除.我只是误解了工会合并是如何运作的?样本回复:https://github.com/davidebbo/MergeTest

还有一点需要注意:如果不是删除第2行,而是删除第1行,那么合并会按预期发生,最后是:

2
new
3
Run Code Online (Sandbox Code Playgroud)

因此,奇怪的情况似乎只发生在会导致标准(非联合)合并下的冲突的场景中.

git git-merge

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

文件夹重命名后,文件存在检查在UNC共享上返回不正确的值

在Windows 7(或服务器)框中,我们在UNC共享上有一个文件夹(跨机器UNC,而不是 localhost).我们重命名该文件夹,然后检查新文件夹位置是否存在文件.即使它存在,File.Exists也需要将近5秒钟才能返回true.

完整的repro可以在https://github.com/davidebbo/NpmFolderRenameIssue上找到.这是核心代码:

// This file doesn't exist yet
// Note that the presence of this existence check is what triggers the bug below!!
Console.WriteLine("Exists (should be false): " + File.Exists("test/test2/myfile"));

// Create a directory, with a file in it
Directory.CreateDirectory("test/subdir/test");
File.WriteAllText("test/subdir/test/myfile", "Hello");

// Rename the directory
Directory.Move("test/subdir/test", "test/test2");

var start = DateTime.UtcNow;

// List the files at the new location. Here, our file shows up fine
foreach (var path in Directory.GetFiles("test/test2"))
{
    Console.WriteLine(path);
}

for …
Run Code Online (Sandbox Code Playgroud)

c# windows file-io winapi

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

如何摆脱msbuild警告MSB3644

在没有安装SDK的计算机上构建Web项目时,会收到以下警告:

警告MSB3644:找不到框架".NETFramework,Version = v4.0"的引用程序集.要解决此问题,请为此框架版本安装SDK或Targeting Pack,或者将应用程序重新定位到已安装SDK或Targeting Pack的框架版本.请注意,程序集将从全局程序集缓存(GAC)中解析,并将用于代替引用程序集.因此,您的程序集可能无法正确定位到您想要的框架.

显然,摆脱警告的一种方法是安装SDK.但是,在这种情况下,我只是想从构建输出中抑制此警告(这几乎是无害的),而不以任何其他方式更改机器的状态.

我尝试将/ p:NoWarn = 3644传递给msbuild(基于其他帖子,比如如何在命令行中抑制来自msbuild的所有编译器和代码分析警告?),但这没有任何影响.

.net msbuild .net-4.0 msbuild-4.0

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

通过ARM/msdeploy部署到Azure Web App而不删除现有文件

使用常规msdeploy(也称为WebDeploy,用于Visual Studio或VSTS发布)部署到Azure Web App(也称为Azure App Service)时,您可以选择删除目标上的现有文件.

但是在使用ARM extensions/msdeploy提供程序时(例如通过ARM模板),默认情况下始终会删除现有文件.有没有办法覆盖这个而不是吹掉现有的文件?

azure msdeploy azure-web-sites azure-resource-manager

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

回滚到以前的版本后获取完整的git日志

我是git的新手,可能没有使用正确的术语,所以忍受我:)

假设我有一个包含5个更改的存储库,例如

D:\test\gitrepo2>git log --oneline
3a5fd33 555
3cfbfae 444
e9a78c8 333
a618586 222
b80d5e1 111
Run Code Online (Sandbox Code Playgroud)

我了解到我可以通过以下方式同步回到早期版本:

D:\test\gitrepo2>git reset e9a78c8 --hard
HEAD is now at e9a78c8 333
Run Code Online (Sandbox Code Playgroud)

我的问题是:完成此操作后,如何获取完整日志,以便我可以回到最新版本?

运行日志不再显示这些修订:

D:\test\gitrepo2>git log --oneline
e9a78c8 333
a618586 222
b80d5e1 111
Run Code Online (Sandbox Code Playgroud)

我也尝试添加--all开关,这没有什么区别.在Mercurial中,在相同的情况下,即使在我更新到早期版本之后,运行"hg log"也会提供完整的日志.

windows git

6
推荐指数
2
解决办法
3818
查看次数

流文本数据时禁用Chrome缓冲

我们有一个网站,可通过http流文本数据。它是通过以下方式设置的:

  • 它不做任何服务器端缓冲
  • Content-Typetext/plain
  • Transfer-Encodingchunked
  • 压缩被禁用

当使用纯curl文本或FireFox时,文本从第一个字节流到浏览器。但是,使用Chrome浏览器时,在发送1024个字节之前不会显示任何文本。之后,一切都会立即显示出来。

问题:有没有办法禁用这种缓冲行为?

更多信息:这是一个简单的ASP.NET页面,演示了该行为:

<%@ language=c# %>

<%
    Response.BufferOutput = false;
    Response.ContentType = "text/plain";

    for (int i=0; i<50; i++)
    {
        Response.Write("01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567\r\n");
        System.Threading.Thread.Sleep(1000);
    }
%>
Run Code Online (Sandbox Code Playgroud)

使用禁用压缩的web.config:

<configuration>
    <system.webServer>
        <urlCompression doStaticCompression="false" doDynamicCompression="false"/>
    </system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)

我还在http://bufferingtest.azurewebsites.net/上运行了一个实时repro 。只需从Chrome和FireFox两者中点击它,即可观察到不同的行为。

streaming google-chrome http

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