How do I stop ignoring a file pattern in a subtree subdirectory?

梦想与她 提交于 2020-02-24 12:55:19

问题


I am using Git for a Unity project of my own (I am the only developer, so I can use destructive commands).

As Unity developers may know, Unity creates ".meta" files for everything under the "Assets" folder, which is the main folder of the project. And these files "must" also be tracked along with original files to keep integrity of the project.

Here is the .gitignore file of the project repository:

# Unity Project Folder
/ExampleProjectName/[Ll]ibrary/
/ExampleProjectName/[Tt]emp/
/ExampleProjectName/[Oo]bj/

# Autogenerated VS/MD solution and project files
ExportedObj/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd

# Unity3D Generated File On Crash Reports
sysinfo.txt

# OS Related Stuff
desktop.ini
.DS_Store
.DS_Store?
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

I also have a framework and common code repository. And I ignore the .meta files in this framework repository, because the .meta files for these scripts should be generated by a per-project basis when the framework is imported into project. (And it is annoying to see .meta files everywhere in the framework repo.)

Here is the .gitignore file of the framework repository:

# Exclude ".meta" files created by Unity
*.meta

# Autogenerated VS/MD solution and project files
### The rest is identical to the project .gitignore file. ###

As you may imagine I tried to add the framework as a subtree to project repository. It actually works, but there is a problem: The .gitignore file of the framework repository which ignores .meta files, also applies to project repository and causes it to ignore .meta files under the subtree's directory.

To sum up: I want the .meta files that are in the subtree directory (recursively) to be tracked on the project repository, but to be ignored on the framework repository.

(For those wondering why .meta files must be tracked, the most important reason is .meta files include the ID of respective asset, and Unity uses these IDs in order to referance these assets in project.)


回答1:


You can add a .gitignore file in your Asset directory that overrides and negates the inherited ignorance with !

I'm a little confused by your file structure hierarchy, so here's an example to demonstrate.

.
├── .gitignore
├── main.meta
└── unity
    ├── .gitignore
    └── sub.meta

Contents of root .gitignore

*.meta

Contents of unity/.gitignore

!*.meta

Now let's see what git wants to track:

git add . && git status --ignored
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

  new file:   .gitignore
  new file:   unity/.gitignore
  new file:   unity/sub.meta

Ignored files:
  (use "git add -f <file>..." to include in what will be committed)

  main.meta

You can see that it's tracking the Unity meta files, but ignoring them everywhere else.



来源:https://stackoverflow.com/questions/38923530/how-do-i-stop-ignoring-a-file-pattern-in-a-subtree-subdirectory

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!