我有一个开发人员在一个文件夹上工作,另一个开发人员在另一个文件夹上工作 我想用特定文件夹更新制作 我正在寻找像这样的命令:
cd /myproject
git pull myfolder
并期望只有myfolder会更新
有可能吗?
好的,我会改写...... 我在项目中有一个项目,一个分支和两个开发人员以及两个文件夹。每个开发人员都在一个文件夹上两者都做出改变并将它们推入分支。我想只将一个文件夹的更改提取到本地计算机
基本/简单不是吗?
答案 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