Git 拉取所有引用远程仓库中与我的本地仓库无关的单个文件的提交
Git pull all commits referring to a single file in remote repo unrelated to my local repo
我想通过 Git pull
this file(到目前为止有 3 次提交)进入我自己的本地存储库,这与 Git Hub 回购协议。是否有可能以某种方式 pull
所有与该特定文件相关的提交?
换句话说,是否可以下载位于任意存储库中的任何文件(意思是与之相关的提交)——这是未在我的存储库中添加为遥控器,也未克隆 - 我有权访问?
如果我理解 Git 正确 - 我可以 pull
通过首先 fetch
'ing 从远程分支更改为本地分支,但我的回购必须添加这样的回购分支作为远程。如果是这样,是否就像添加新的远程仓库和 pull
ing 特定分支一样简单(甚至 cherry-pick
只需要提交),而这应该只是在我的本地仓库中创建新分支,所有或选择(cherry-pick
ed)提交?
最好的办法是签出单个文件并提交每个修订版。
git remote add new_repo PATH_TO_REPO.git
git fetch new_repo
git checkout <SHA> -- my_file.txt
git add my_file.txt
对每个提交重复
git pull
并不是真正对 文件 进行操作,而是对 提交 进行操作。 git pull
所做的只是 运行 git fetch
,然后是 运行 git merge
或您选择的其他第二个 Git 命令。 fetch
步骤获取提交,而 merge
步骤——你可能 不想 想要——将这些提交与你当前的 (HEAD
)提交和分支。
你在此处括号部分的想法肯定是正确的:
In other words is it possible to download ... (... commits related to some specific file) ...
技巧是:
- 找到那些提交(您已经使用 GitHub 来实现);
- 但一旦找到并获得它们,就会实际使用它们。
您只能获得整个提交,或者什么都没有;如果你得到一个完整的提交,你也会得到 导致 那一次提交的所有提交。 app-ideas repository(你想要的文件出现在其中)包含,在我写这篇文章的那一刻,并且只使用来自 GitHub 的信息,实际上没有仔细观察,332 次提交。它还显示五个分支名称。
您可以将所有 332 个提交添加到您的存储库,或者在某些情况下(但不是这个)所有 332 个提交的某些子集,而无需使用远程名称:
git fetch https://github.com/florinpop17/app-ideas <refspec> [<refspec> ...]
将引入由 refspec
参数标识的提交,并记住它通过 FETCH_HEAD
和 refspec
参数。但是:
git remote add app-ideas https://github.com/florinpop17/app-ideas
git fetch app-ideas
更方便因为它也是一样的,然后添加五个remote-tracking名称对应五个分支名称。例如,您现在将有一个 name app-ideas/master
。它确实需要更多的预先输入,但它可以节省您以后的工作,最终您只需 运行 git remote remove app-ideas
当您完成它时。
要在没有遥控器的情况下执行此操作,例如:
git fetch https://github.com/florinpop17/app-ideas master:tempbranch
创建您自己的名为 tempbranch
的分支,而不是使用 app-ideas/master
。您甚至可以创建 no 分支并仅依赖 FETCH_HEAD
,但是您必须记住 next git fetch
你 运行——或者 git pull
运行——将把它擦掉,这 332 次提交中的部分或全部可能会从你自己的存储库中消失。您最终可能还是想删除 tempbranch
,所以您并没有真正节省多少。
无论如何,在获取之后,您的存储库中就有了所有 322 次提交。这些提交相互关联,但与存储库中的任何 other 提交无关。在图论术语中,它们的提交,由您的 app-ideas/master
或 tempbranch
命名和发现,从您自己的所有提交、命名和发现中形成一个 不相交的子图 通过您自己的分支名称。
此时,您可以使用 Git 的各种其他操作,包括 git cherry-pick
或(如 )git checkout
,以处理来自他们的提交,并将其添加到您的(仍然独立的)提交中。完成后,删除远程名称或 tempbranch
名称,无论您使用哪种方法。他们的提交将变得无法找到,最终会从您的存储库中退回。
我想通过 Git pull
this file(到目前为止有 3 次提交)进入我自己的本地存储库,这与 Git Hub 回购协议。是否有可能以某种方式 pull
所有与该特定文件相关的提交?
换句话说,是否可以下载位于任意存储库中的任何文件(意思是与之相关的提交)——这是未在我的存储库中添加为遥控器,也未克隆 - 我有权访问?
如果我理解 Git 正确 - 我可以 pull
通过首先 fetch
'ing 从远程分支更改为本地分支,但我的回购必须添加这样的回购分支作为远程。如果是这样,是否就像添加新的远程仓库和 pull
ing 特定分支一样简单(甚至 cherry-pick
只需要提交),而这应该只是在我的本地仓库中创建新分支,所有或选择(cherry-pick
ed)提交?
最好的办法是签出单个文件并提交每个修订版。
git remote add new_repo PATH_TO_REPO.git
git fetch new_repo
git checkout <SHA> -- my_file.txt
git add my_file.txt
对每个提交重复
git pull
并不是真正对 文件 进行操作,而是对 提交 进行操作。 git pull
所做的只是 运行 git fetch
,然后是 运行 git merge
或您选择的其他第二个 Git 命令。 fetch
步骤获取提交,而 merge
步骤——你可能 不想 想要——将这些提交与你当前的 (HEAD
)提交和分支。
你在此处括号部分的想法肯定是正确的:
In other words is it possible to download ... (... commits related to some specific file) ...
技巧是:
- 找到那些提交(您已经使用 GitHub 来实现);
- 但一旦找到并获得它们,就会实际使用它们。
您只能获得整个提交,或者什么都没有;如果你得到一个完整的提交,你也会得到 导致 那一次提交的所有提交。 app-ideas repository(你想要的文件出现在其中)包含,在我写这篇文章的那一刻,并且只使用来自 GitHub 的信息,实际上没有仔细观察,332 次提交。它还显示五个分支名称。
您可以将所有 332 个提交添加到您的存储库,或者在某些情况下(但不是这个)所有 332 个提交的某些子集,而无需使用远程名称:
git fetch https://github.com/florinpop17/app-ideas <refspec> [<refspec> ...]
将引入由 refspec
参数标识的提交,并记住它通过 FETCH_HEAD
和 refspec
参数。但是:
git remote add app-ideas https://github.com/florinpop17/app-ideas
git fetch app-ideas
更方便因为它也是一样的,然后添加五个remote-tracking名称对应五个分支名称。例如,您现在将有一个 name app-ideas/master
。它确实需要更多的预先输入,但它可以节省您以后的工作,最终您只需 运行 git remote remove app-ideas
当您完成它时。
要在没有遥控器的情况下执行此操作,例如:
git fetch https://github.com/florinpop17/app-ideas master:tempbranch
创建您自己的名为 tempbranch
的分支,而不是使用 app-ideas/master
。您甚至可以创建 no 分支并仅依赖 FETCH_HEAD
,但是您必须记住 next git fetch
你 运行——或者 git pull
运行——将把它擦掉,这 332 次提交中的部分或全部可能会从你自己的存储库中消失。您最终可能还是想删除 tempbranch
,所以您并没有真正节省多少。
无论如何,在获取之后,您的存储库中就有了所有 322 次提交。这些提交相互关联,但与存储库中的任何 other 提交无关。在图论术语中,它们的提交,由您的 app-ideas/master
或 tempbranch
命名和发现,从您自己的所有提交、命名和发现中形成一个 不相交的子图 通过您自己的分支名称。
此时,您可以使用 Git 的各种其他操作,包括 git cherry-pick
或(如 git checkout
,以处理来自他们的提交,并将其添加到您的(仍然独立的)提交中。完成后,删除远程名称或 tempbranch
名称,无论您使用哪种方法。他们的提交将变得无法找到,最终会从您的存储库中退回。