我如何制作GIT凭证助手?

时间:2013-05-17 01:17:42

标签: objective-c git bash shell nstask

为了清晰起见,原始问题已经过编辑:

我有一个执行git clone https://my.repo.project.git的主项目。该项目有2个目标(主要目标和密码帮助目标)。存储库受密码保护,将询问用户名,后跟密码。主应用程序通过NSTask对象调用git命令。

NSDictionary *environmentDict = [[NSProcessInfo processInfo] environment];

[task setLaunchPath:gitExecutableLaunchPath];
[task setArguments:[NSArray arrayWithObjects:@"clone", @"https://my.repo.project.git"];
[task setCurrentDirectoryPath:path];
[task setEnvironment:environmentDict];

我已经按照this project中的概念启用了我的密码帮助程序目标,以便在主目标没有存储在repo的钥匙串中的git凭据时自动运行。所有这些辅助密码帮助程序目标都是以下代码(为简单起见):

int main (int argc, const char * argv[]) {
    @autoreleasepool {
        NSLog(@"Password helper has been launched");

        char *username = "my_username";
        char *password = "my_password";
        printf("%s\n", username);
        printf("%s\n", password);
    }
    return 0;

我可以在日志中看到密码助手应用程序已经启动,但我总是收到“身份验证失败的消息”。知道我做错了什么吗?我的目标是开发一个证书助手应用程序,就像git的git-credential-osxkeychain应用程序一样。非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

找到解决方案。检查控制台后,我注意到Askpass目标被调用了两次。似乎第一次调用用户名,第二次调用密码。我使用以下代码来确定调用Askpass目标的原因并使用适当的值进行响应。

NSArray *args = [[NSProcessInfo processInfo] arguments];