【发布时间】:2017-01-16 00:09:59
【问题描述】:
假设我这样做:
mkdir some_repo
cd some_repo
git init
git touch dummy.txt
git commit -m 'dummy commit'
git remote add -f some_other_remote_repo path/to/.git
git merge --no-ff --no-commit merge remotes/some_other_remote_repo/master
不输入git status 我看到类似:
new: f1/some.txt
new: f1/some11.txt
new: f2/some2.txt
new: f3/some3.txt
所以现在我只想添加特定的目录及其内容。我可以这样做:
git reset f2/
git reset f3/
现在正在运行git status:
new: f1/some.txt
new: f1/some11.txt
untracked: f2/some2.txt
untracked: f3/some3.txt
所以它可以满足我的需要,我可以提交和删除本地添加的 f2 和 f3 目录。但是,如果以后我决定现在要跟踪 f2 目录及其内容,该怎么办?
不,如果我再次运行git merge --no-ff --no-commit merge remotes/some_other_remote_repo/master,它会说一切都是最新的。所以它现在忽略那些未跟踪的目录。他们是一种告诉 git 仅跟踪远程的特定目录的方法吗?
【问题讨论】:
-
这里值得一提的是,Git 本身并不跟踪目录。相反,如果在结帐时,Git 需要创建一些目录
f1以便拥有一个文件f1/some.txt,它只是这样做;当从提交 X 移动到提交 Y 时,如果提交 X 有f1/some.txt并且提交 Y 在f1中没有任何内容,并且f1变为空,Git 倾向于删除f1。 (这些年来,我见过很多 Git 无法删除空目录的极端案例,所以你不应该过多地计算第二个行为。) -
@torek 是的,我明白了。我自己也注意到了。虽然在我的情况下,每个子目录都是一个模块。所以应该包括或排除整个目录。