Git仅检出分支目录中的新文件

时间:2013-02-13 10:25:52

标签: git git-checkout

我有这样的情况。 一位开发人员在./model目录中工作,他正在向其添加新文件,然后他提交新的model_files并推送到origin / master

现在第二个开发人员也在同一目录./model(在他自己的工作目录中)编写模型。

假设开发人员A创建了这样的模型:

./model/m1.php
./model/m2.php

现在开发人员B创建了这样的模型:

./model/m3.php
./model/m4.php

假设开发人员A提交更改并推送到origin / master,因为开发人员B需要m1.php和m2.php模型来完成他的工作。

开发人员B还在项目中创建了许多其他更改/文件夹/文件,不仅在./models目录中,他的工作尚未完成。如果他合并或拉动,那么他的工作就会失败。

开发人员B如何只检索开发人员A创建的文件夹./model中的新模型文件。 我在开发者B机器上尝试过这样的东西。我假设开发人员B没有提交m3.php和m4.php,因为还没有以那些文件结束。他只需要在./models目录下有来自开发人员A的新文件(m1.php和m2.php)。在开发人员B机器上我试过:

git fetch origin
git checkout origin/master ./model/*

但不幸的是错误让我

error: pathspec 'model/m3.php' did not match any file(s) known to git.
error: pathspec 'model/m4.php' did not match any file(s) known to git.

但如果我执行:

git checkout origin/master ./model/m1.php ./model/m2.php

然后它可以工作,但这假设我必须知道我需要从这个分支结账的exacly文件名。

有人可以帮我这个吗?感谢。

4 个答案:

答案 0 :(得分:2)

开发者B应该运行

  
      
  1. git stash
  2.   
  3. git pull origin master
  4.   
  5. git stash apply
  6.   

第1行存储开发人员的工作,因此在执行pull

之前,他们的分支没有变化

第2行从远程主目录执行提取和合并。这将得到开发者A的更改。

第3行重新应用开发人员B对m3.php和m4.php文件的工作。

显然,在git中执行命令时不要包含数字。

答案 1 :(得分:1)

您需要将传入的更改合并到工作副本中。为了做到这一点,只需:

git fetch origin
git merge origin/master

为此,您必须先在计算机B中提交或暂存本地更改。

答案 2 :(得分:1)

我明白了。几乎一切都很好,除了最后的'*'。

将文件从远程分支下载到某个项目文件夹的正确方法,只将新文件添加到此文件夹:

git fetch origin
git checkout origin/master model/

答案 3 :(得分:0)

你的shell扩展

git checkout origin / master ./model / *

在git看到它之前

它可能正在扩展到

git checkout origin/master ./model/m1.php ./model/m2.php ./model/m3.php ./model/m4.php

然后你从git中得到master缺少model/m3.phpmodel/m3.php的错误。告诉shell不要扩展你的*,比如

git checkout origin/master './model/*'

似乎有效,或者只是按照其他解决方案使用显式路径,例如

git checkout origin/master model/