📄 git-export.c
字号:
#include "cache.h"#include "commit.h"/* * Show one commit */void show_commit(struct commit *commit){ char cmdline[400]; char hex[100]; strcpy(hex, sha1_to_hex(commit->object.sha1)); printf("Id: %s\n", hex); fflush(NULL); sprintf(cmdline, "cat-file commit %s", hex); system(cmdline); if (commit->parents) { char *against = sha1_to_hex(commit->parents->item->object.sha1); printf("\n\n======== diff against %s ========\n", against); fflush(NULL); sprintf(cmdline, "git diff %s %s", against, hex); system(cmdline); } printf("======== end ========\n\n");}/* * Show all unseen commits, depth-first */void show_unseen(struct commit *top){ struct commit_list *parents; if (top->object.flags & 2) return; top->object.flags |= 2; parents = top->parents; while (parents) { show_unseen(parents->item); parents = parents->next; } show_commit(top);}void export(struct commit *top, struct commit *base){ mark_reachable(&top->object, 1); if (base) mark_reachable(&base->object, 2); show_unseen(top);}struct commit *get_commit(unsigned char *sha1){ struct commit *commit = lookup_commit(sha1); if (!commit->object.parsed) { struct commit_list *parents; if (parse_commit(commit) < 0) die("unable to parse commit %s", sha1_to_hex(sha1)); parents = commit->parents; while (parents) { get_commit(parents->item->object.sha1); parents = parents->next; } } return commit;}int main(int argc, char **argv){ unsigned char base_sha1[20]; unsigned char top_sha1[20]; if (argc < 2 || argc > 4 || get_sha1_hex(argv[1], top_sha1) || (argc == 3 && get_sha1_hex(argv[2], base_sha1))) usage("git-export top [base]"); export(get_commit(top_sha1), argc==3 ? get_commit(base_sha1) : NULL); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -