Git只获取一个目录

时间:2013-08-19 21:34:55

标签: git fetch pull

我有一个开发人员在一个文件夹上工作,另一个开发人员在另一个文件夹上工作 我想用特定文件夹更新制作 我正在寻找像这样的命令:

cd /myproject
git pull myfolder

并期望只有myfolder会更新

有可能吗?

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

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

基本/简单不是吗?

3 个答案:

答案 0 :(得分:4)

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

git archive --format=tgz --remote=<url-to-repo> master -- myfolder | tar zxvf -

这表示要创建存储库主分支的gzipped tar球 住在<url-to-repo>,但仅包含myfolder下的内容。 通过tar进行管道处理将取消归档数据并将其放入当前数据中 工作目录。

如果您实际上正在尝试管理工作树并与其他两个一起工作 开发人员,然后你要求做的事情真的违背了 工具。但是你必须更加详细地说明你正在尝试什么 完成,以便有人提出良好的工作流程建议。

<强>更新

所以听起来好像你只想在托管中获取一个文件夹的更改 工作树。对不起,但Git没有这样的操作。就像我在说的那样 下面的评论,Git管理文件树。它不允许部分a 树在一个版本,另一个部分在不同的修订版像 你在暗示 - 也许你是Subversion的先前用户 可能的?

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

$ git fetch
$ git checkout @{u} -- myfolder

git fetch将使您的远程参考更新 - 它将获取 来自服务器的最新信息。 git checkout @{u} -- myfolder会成功 myfolder看起来像跟踪分支中存在的内容。这有两个 后果:

  • 您在本地分支机构上没有所有更改(和您一样) 不想要他们,所以没关系),

  • myfolder将显示为已修改,因为myfolder的内容已包含 已经使用远程存储库中的最新版本进行了更新,但确实如此 与您当前的修订版不同。

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

$ git checkout -- myfolder

从那里,您可以按照通常的机制来获取您的分支机构 与遥控器保持同步(可能是git pull)。

但是,这可能不是您想要的操作方式。尽管你的评论, “与用例无关”,它确实很重要。通常会更好 如何实现您的总体目标和管理您的开发,但它 需要了解你想要做的事情。那一刻,你呢 提议真的违背了Git的工作方式。

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

一个好的起点是 here。 它本身包含大量信息,有些信息跟随链接 几种不同风格的Git工作流程。你想要结束的地方是 其中有一个提交代表您实际投入的版本 生产,不破坏别人为你做的工作。理想的情况下, 你会用一些有意义的方式来标记推进生产的内容。

我知道没有人喜欢听,但训练可能对你的情况非常有帮助。 GitHub提供了一些free online classes 以及其他一些资源。从经验来看,一旦掌握了如何 Git的工作原理及其解决的问题,最终会得到更好的工作流程。

答案 1 :(得分: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.

这是一种糟糕的做事方式,因为当您结帐并重新发送该文件夹时,您将丢失更改历史记录。

答案 2 :(得分:0)

是的,git fetch只有一个git子目录很容易。假设您在远程git-repo中有以下项目目录。

project/  
  ├── code  
  └── data  

目前假设您已将项目克隆到本地文件系统作为git存储库。

$ cd project
$ rm -rf code 

#now we try to fetch the "code" directory.
$ git fetch 
$ git checkout HEAD code

如果你有嵌套的目录结构,如

project/
├── code
│   ├── dev
│   └── test
└── data

然后在这种情况下,您应该使用您想要的特定目录,

$ git checkout HEAD code/dev