我正在尝试编写一个简单的程序,在一个Github repo上调用git checkout -- .
,这将是一个命令行参数。我想称之为> clearRepo repoName
。我将所有的repos保存在同一个Github目录中。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>
#include <errno.h>
void print_error()
{
fprintf(stderr, "Error executing: %s\n", strerror(errno));
exit(EXIT_FAILURE);
}
void print_usage(char* this)
{
printf("SYNTAX ERROR:\n%s [directoryName]\n", this);
exit(EXIT_FAILURE);
}
int main(int argc, char **argv)
{
if(argc != 2)
{
print_usage(argv[0]);
}
pid_t pid = fork();
if (pid == 0)
{
static char* params[] = {"git", "checkout", "--", ".", NULL};
char s[50], s2[50];
strcpy(s, "/home/myname/Documents/Github/");
strcpy(s2, argv[1]);
strcat(s, s2);
printf("s: %s\n", s);
int err = execv(s, params);
if(err == -1)
{
print_error();
}
exit(127);
}
else
{
waitpid(pid, 0, 0);
}
return 0;
}
它编译得很好,但每次运行时print_error()都会吐出Error executing: Permission denied
。我不太熟悉为Linux编写程序,所以这可能是一个简单的错误。我很欣赏有关我做错的信息。谢谢。
答案 0 :(得分:3)
您传递给execv
的第一个参数是一个目录,但execv
需要一个程序。错误“Permission denied”有点误导,因为没有“执行目录的权限”这样的事情。
要更改当前目录,请致电chdir
。然后,调用您想要调用的exec*
函数中的任何一个git
。
答案 1 :(得分:-2)
chmod u + x filename用于更改文件权限。 如果要签出分支,但保存更改,请使用git stash。当你回到分支时,你可以使用git stash pop或git stash apply。
答案 2 :(得分:-3)
Git命令和程序非常棘手。
按照以下步骤操作,您可以调试问题。