Старый 14.05.2016, 09:26   #1
JohnBootDoe
 
Регистрация: 07.04.2016
Сообщений: 11
Репутация: 0
По умолчанию Парсинг GIT.

Доброе время суток.
Столкнулся с проблемой, нашлась на сайте директория .git
http://site.com/.git/index - выдает список файлов, но пройти по любому из них нельзя - названия хэшированы.

http://site.com/.git/refs/heads/master - выдает название последнего (?) файла (8ed2a679349703397f377613ffa267de57d48562)
http://site.com/.git/objects/8e/d2a679349703397f377613ffa267de57d48562 - скачал, но как его просмотреть?
git cat-file -t 8ed2a679349703397f377613ffa267de57d48562 - выдает что файл битый.

Есть ли какие то автоматические парсеры с поддержкой соксов? Свой написать не могу ибо фиг его знает как открыть скаченный файл, в нем информция по другим.

Спасибо.
JohnBootDoe вне форума   Ответить с цитированием
Старый 14.05.2016, 09:50   #2
AiR0
 
Регистрация: 23.09.2013
Сообщений: 37
Репутация: 0
По умолчанию

PHP git dumper with socks
https://gist.github.com/firsov/734b98c7ac7d74a5cdf72eb83b9b607b
пожалуйста
AiR0 вне форума   Ответить с цитированием
Старый 14.05.2016, 12:26   #3
Beched
 
Регистрация: 06.07.2010
Сообщений: 400
Репутация: 118
По умолчанию

Под различные VCS: https://github.com/kost/dvcs-ripper
Beched вне форума   Ответить с цитированием
Старый 15.05.2016, 00:53   #4
profexer
 
Регистрация: 06.01.2011
Сообщений: 117
Репутация: 63
По умолчанию

В любой удобной папке выполняем git init, качаем .git/index в папку .git, выполняем git ls-files > files.txt.
Теперь в файле files.txt список всех файлов.
Если нужно скачать все файлы git archive --format zip --remote=git://git.foo.com/project.git HEAD
Сам GIT можно юзать через сокс, установив настройки, или можно выполнить на любом пробном vps.

Последний раз редактировалось profexer; 15.05.2016 в 00:57..
profexer вне форума   Ответить с цитированием
Старый 15.05.2016, 03:39   #5
JohnBootDoe
 
Регистрация: 07.04.2016
Сообщений: 11
Репутация: 0
По умолчанию

Т.к. не имел опыта работы с GIT, думал что нужно полностью восстановить все файлы что бы получилось одно единное (Хэшированно, вот и подумал).
Все оказалось куда проще.

http://site.com/.git/refs/heads/master - Выдает 8ed2a679349703397f377613ffa267de57d48562

Код:
root@kali:~/scripts/git/d/.git# git cat-file -p 8ed2a679349703397f377613ffa267de57d48562
tree f11c07da8c07eda9dc6a857d31cef4dd9dff270b
parent ae4e488da9b88de0b55b99b4965a8081d6cd6f2a
author tester <hek@da.cpm> 1462569363 -0400
committer test <hek@da.cpm> 1462569363 -0400

no message
Забираем tree - http://site.com/.git/objects/f1/1c07da8c07eda9dc6a857d31cef4dd9dff270b

Переносим
Цитата:
root@kali:~/scripts/git/d# mv 1c07da8c07eda9dc6a857d31cef4dd9dff270b .git/objects/f1
Читаем
Код:
root@kali:~/scripts/git/d# git cat-file -p f11c07da8c07eda9dc6a857d31cef4dd9dff270b
100644 blob cde82dae68191e7dd1b26dbc63bcafce6caeacf3	.DS_Store
100644 blob 57850db34447ed3e2d70c3c0e06571b34607e2c3	.htaccess
040000 tree 71eebc98faaa1ea94286675d6f23ddb3e7e4f084	emails
100644 blob dd3d5544725cdeef35111afe17f57b4bc03221ec	index.php
100644 blob 85ee00db01d6d387e554f783cea0e4b72790cb46	license.txt
100644 blob 468ee065f0bb29f61fb514c1510e41c73f56773e	readme.html
100644 blob ea6a1ad8ae3ba9c087b8919f3b2da5f94826cb2b	wp-activate.php
040000 tree de625a1fef606e7a6d593b99b94252e41063314a	wp-admin
100644 blob 3e1b8ef56013cdcd11f4a23c7859ba32ab3b5af2	wp-blog-header.php
100644 blob 2fb148a8dca418ddd9f050e0dc9574b5d25717ad	wp-comments-post.php
100644 blob 57edd55744f91e0296f213f312ff9c8b4b3d447f	wp-config.php
040000 tree cf1c3a9cfa0061f8561dfa0b3d2859808d1afffe	wp-content
100644 blob 15c6676b77976af549bfa470a5fd0a42fd43e937	wp-cron.php
040000 tree 3e22b27b8852373da178bf929d886ce3923a0618	wp-includes
100644 blob b196f736da518a16f231e0b1f0c80bee477d3dfe	wp-links-opml.php
100644 blob 94a8b541e7087af0bbfd60b28edae3fb170a0308	wp-load.php
100644 blob a9589f56859a0a2890445687e614ec88c42801fc	wp-login.php
100644 blob 5efb57fcc1a57a8c114ba237bf236cf9662efbea	wp-mail.php
100644 blob ef1d2cd66588ac8c1ad6a4ce4cde0e201e7f1c2d	wp-settings.php
100644 blob 6852bb88cb6f78d53e2caa6f22195791084c0f5f	wp-signup.php
100644 blob 3d211043ebd38efe8972a7326435eab80bd4f034	wp-trackback.php
100644 blob b3cbc6d6750bd4a76001ab1cb291cd29f5533cf6	xmlrpc.php
Скачиваем http://site.com/.git/objects/57/edd55744f91e0296f213f312ff9c8b4b3d447f

Цитата:
root@kali:~/scripts/git/d# mv edd55744f91e0296f213f312ff9c8b4b3d447f .git/objects/57
root@kali:~/scripts/git/d# git cat-file -p 57edd55744f91e0296f213f312ff9c8b4b3d447f
<?php
/**
* The base configuration for WordPress
*
* The wp-config.php creation script uses this file during the
* installation. You don't have to use the web site, you can
* copy this file to "wp-config.php" and fill in the values.
Всем спасибо за помощь! Все оказалось проще, возможно кому то пригодиться.
JohnBootDoe вне форума   Ответить с цитированием
Старый 15.05.2016, 16:13   #6
SynQ
 
Регистрация: 11.07.2010
Сообщений: 953
Репутация: 352
По умолчанию

Кстати, вот тут хорошая статья про внутрянку гита:
http://yurichev.com/blog/git/
SynQ вне форума   Ответить с цитированием
Старый 20.05.2016, 05:34   #7
JohnBootDoe
 
Регистрация: 07.04.2016
Сообщений: 11
Репутация: 0
По умолчанию

Добавлю ещё ко всему.
Если на папку гита 403 либо удалена, зачастую остается файл .gitignore который можно прочитать, и бывает нужная информация (Админ панель, либо вообще какие то дампы)
JohnBootDoe вне форума   Ответить с цитированием
Старый 27.06.2017, 00:28   #8
another05
 
Регистрация: 12.12.2012
Сообщений: 1
Репутация: 0
По умолчанию

Намного печальней, когда гит начинает «архивировать» файлы, т.е. ты знаешь, что есть файл edd55744f91e0296f213f312ff9c8b4b3d447f, но http://site.com/.git/objects/57/edd55744f91e0296f213f312ff9c8b4b3d447f ругается 404. Чаще всего это связано как раз с тем, что гит пакует группы файлов в один. Информация о паках хранится в
.git/objects/info/packs
однако, эта инфа есть не всегда. В этом и заключается печаль (
another05 вне форума   Ответить с цитированием
Старый 15.09.2017, 01:03   #9
JohnBootDoe
 
Регистрация: 07.04.2016
Сообщений: 11
Репутация: 0
По умолчанию

Кароче скачал я этот pack файл. Но суть такая что это старый пак, с прошлого commit, и нету ни HEAD, ни masters, соотвествтенно найти tree не представляется пока что возможным. Ну кроме как скрипт набросать который каждый файл будет открывтаь и искать. Есть у кого решение?
JohnBootDoe вне форума   Ответить с цитированием
Старый 15.09.2017, 21:53   #10
JohnBootDoe
 
Регистрация: 07.04.2016
Сообщений: 11
Репутация: 0
По умолчанию

Код:
#!/usr/bin/perl  
use strict;
use warnings;
#find .git/objects -type f > all_objects.txt
#remove /objects/ and /, so keep only first 2 bytes and name of the object.
#rdot
my $file = 'all_objects.txt';
open my $info, $file or die "Could not open $file: $!";

while( my $line = <$info>)  {     
    open   (FILE, "$file");
		while($line= <FILE> ){
			my $var = `git cat-file -p $line`;
			if ($var =~ /(.*) tree (.*)/){
			print $line;
			}
			
			}
    last if $. == 2;
    close FILE; 
}
Вывод с системной команды в файл all_projects.txt
Убрать из txt файла .git/objects/ и все слэши.

Выдаст все файлы которые как то или иначе содержат tree, в моем случае помогло.
Если понадобиться кому-то. Если не хотите ждать или проект большой, просто добавьте проверку на "author" или "parent".

Последний раз редактировалось JohnBootDoe; 15.09.2017 в 21:57..
JohnBootDoe вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot