Git只获取一个目录

fre*_*edy 5 git pull fetch

我有一个开发人员在一个文件夹上工作,另一个在另一个文件夹上工作.我想用一个特定的文件夹更新生产我正在寻找一个命令,如:

cd /myproject
git pull myfolder
Run Code Online (Sandbox Code Playgroud)

并期望只有myfolder会更新

可能吗?

好的,我会改写......我在项目中有一个项目,一个分支和两个开发人员以及两个文件夹.每个开发人员都在一个文件夹上 两者都进行更改并将它们推入分支.

我想只将一个文件夹的更改提取到本地计算机中

基本/简单不是吗?

Joh*_*ter 5

假设您真正要求的是从 git 存储库远程抓取文件,而没有您自己的工作树(或本地存储库的克隆),您可以这样做:

git archive --format=tgz --remote=<url-to-repo> master -- myfolder | tar zxvf -
Run Code Online (Sandbox Code Playgroud)

这表示要创建位于 的存储库 master 分支的 gzip 压缩 tar 球<url-to-repo>,但仅包含myfolder. 管道通过tar将取消存档数据并将其放在当前工作目录中。

如果您实际上是在尝试管理工作树并与其他两个开发人员一起工作,那么您要求做的事情确实与工具的本质背道而驰。但是您必须更详细地说明您要完成的工作,以便有人提出好的工作流程建议。

更新

所以听起来好像您只想在托管工作树中获取一个文件夹的更改。抱歉,但 Git 不会那样操作。正如我在下面的评论中所说,Git 管理文件树。它不允许树的一部分处于一个修订版,而另一部分则处于不同的修订版,就像您建议的那样 - 也许您是 Subversion 的以前用户,这是可能的?

您可以获得与您想要的效果类似的效果,但您必须修改您的工作副本。除非您想放弃您的开发人员之一,否则我不会提交修改。你可以这样:

$ git fetch
$ git checkout @{u} -- myfolder
Run Code Online (Sandbox Code Playgroud)

git fetch将使您的远程引用保持最新——它将从服务器获取最新信息。 git checkout @{u} -- myfoldermyfolder看起来像跟踪分支中存在的内容。这有两个后果:

  • 您没有在本地分支上进行所有更改(并且您不想要它们,所以没关系),并且

  • myfolder将显示为正在修改,因为 的内容myfolder已更新为远程存储库中可用的最新版本,但与您当前的修订版本不同。

要使您的工作副本恢复正常,请执行以下操作:

$ git checkout -- myfolder
Run Code Online (Sandbox Code Playgroud)

从那里,您按照通常的机制调用使您的分支与远程(可能git pull)保持同步。

然而,这可能不是您想要的操作方式。尽管您的评论是 “用例无关紧要”,但这确实很重要。通常有更好的方法来实现您的总体目标和管理您的开发,但这需要了解您正在尝试做什么。目前,您的提议确实与 Git 的工作方式背道而驰。

所以让我为你准备一些东西。研究使用主题分支 作为管理正在完成的开发工作的一种方式,而不是为树中的每个开发人员使用文件夹。当您测试和批准将分支和合并纳入生产时,可以对分支和合并进行清晰、合乎逻辑的更改。

这里是一个很好的起点 。它本身包含相当多的信息,有些信息会跟随指向几种不同风格的 Git 工作流程的链接。您想要结束的地方是有一个代表您实际投入生产的版本的提交,而不会破坏其他人为您所做的工作。理想情况下,您应该以某种有意义的方式标记推送到生产中的内容。

我知道没有人喜欢听它,但培训可能对您的情况非常有帮助。GitHub 提供了一些免费的在线课程 以及其他一些资源。从经验来看,一旦你掌握了 Git 的工作原理和它解决的问题,你最终会得到一个更好的工作流程。


Phe*_*ide 1

你们有某种生产部门吗?假设有一个开发和生产分支......

# Get all the changes from the dev branch
git checkout dev
git pull origin dev

# Checkout the production branch
git checkout production

# Checkout the dev version of the folder you want
git checkout dev myfolder

# Commit all the changes that are now showing up.
Run Code Online (Sandbox Code Playgroud)

这是一种糟糕的处理方式,因为当您签出并重新提交该文件夹时,您将丢失更改历史记录。