Как протолкнуть только файлы внутри папки, используя gitignore - PullRequest
0 голосов
/ 18 мая 2019

Мне было интересно, как я могу заставить git игнорировать фактическую папку, но отслеживать и отправлять файлы в самой папке на github?

У меня есть GitHub-репозиторий, который я хотел бы использовать в качестве тестового сайта, но когда я нажимаю свой код, он всегда находится в папке www, что портило его при использовании Github Pages. Я использую Vapid CMS, и он помещает все скомпилированные HTML-файлы в подпапку www. Как я могу просто отправить содержимое в эту папку и игнорировать родительскую папку, используя gitignore? Я использую GitKraken для отслеживания и отправки моих файлов.

Вот мой репозиторий - https://github.com/jcbbuller/bigsheep.design/tree/master

Спасибо!

Ответы [ 3 ]

1 голос
/ 18 мая 2019

вместо использования .gitignore Я предлагаю создать новый репо в подпапке www, используя:

cd www
git init
git remote add origin git@github.com:jcbbuller/bigsheep.design.git
git add .
git commit -m 'initial commit'
git push -u -f origin HEAD
0 голосов
/ 18 мая 2019

Коммиты - это небольшие объекты, ссылающиеся на деревья в репо, поэтому все, что вам нужно, это коммиты, напрямую ссылающиеся на деревья в www в вашей основной истории.

Существует множество способов сделать этовозможно, самое простое - просто обновлять все целиком каждый раз.

git branch -f pages master
git filter-branch --subdirectory-filter www pages -- www

, который, хотя и восстанавливает уже существующие (ранее сгенерированные) коммиты каждый раз, фактически не добавляет ничего лишнего, и этонастолько простой, что он, скорее всего, будет достаточно хорош и будет оставаться легким в течение долгого времени, пока вы не попадете в историю коммитов тысячами.Полностью инкрементная версия, работающая за несколько миллисекунд, будет легко создавать и понимать, что-то вроде

#!/bin/sh
# post-commit and post-merge hook
[[ `git rev-parse -q --verify pages` != `git rev-parse -q --verify master:www ]] && {
        pages=`git rev-parse pages`
        git update-ref refs/heads/pages $(
                git commit-tree ${pages:+-p pages} -m "built pages" master:www
        )
}

, но это всего лишь более эффективный способ получения того же эффекта.

0 голосов
/ 18 мая 2019

Git не загружает файлы.Git pushes commits .

Теперь, верно, что коммиты содержат файлов, так что вы можете, если хотите, думать об этом как о "выталкивании файлов".Проблема в том, что, когда вы думаете об этом так, вы попадаете в ситуацию, не зная, что делать.:-) Так что лучше думать о Git как о коммитах .Теперь ваш вопрос звучит так:

Когда я запускаю git push, я продолжаю выдавать коммиты с файлами с именами www/file1, www/file2 и так далее.Я хотел бы нажать коммиты, которые имеют файлы с именами file1, file2 и т. Д.

Теперь ответ очевиден: make коммитов, которые содержат файлы с именамиfile1, file2 и т. Д.Для этого возьмите какой-нибудь существующий коммит с файлами в папке www и скажите Git переименовать их все, чтобы они больше не использовали имя www:

$ cd www
$ git mv * ..

например.

Очевидным недостатком является то, что теперь вы перемежаете коммиты, у которых все файлы имеют имена www/file1, www/file2 и т. д., с другими коммитами, которые вообще не имеют www, ииметь все файлы с именами file1, file2 и т. д.Существует два очевидных подхода к решению этой проблемы:

  • помещает коммиты с переименованными файлами в другую ветку, чтобы коммиты с двумя разными схемами именования не были чередование или
  • как Ницан Авни предложил , поместите коммиты, файлы которых были переименованы, как это, в отдельный репозиторий .

Есть и другие способы - вы можете изобрести свой собственный, если хотите, - но все они сводятся к тому, что если какое-то программное обеспечение настаивает на том, чтобы видеть коммиты с файлами с именем A B C и так далее, и ваши существующиеУ коммитов есть файлы с именем folderX/A folderX/B folderX/C, вам нужно делать новые и разные коммиты, в которых есть файлы с именами, которые требует программное обеспечение.Какие обязательства, если таковые имеются, "лучше" или "более мастерски" ... ну, эта часть зависит от вас.Что касается Git, то это просто разных коммитов .Если все программное обеспечение, которое вы используете, не против поместить все эти различные коммиты в один репозиторий, вы можете использовать один репозиторий для их хранения.Если часть программного обеспечения возражает, вам понадобится несколько репозиториев для их хранения или для исправления этого программного обеспечения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...