2012-06-24 3 views
0

У меня сейчас очень медленное соединение, и мне нужно нажать новую ветку на сервер git моей компании. С SVN я могу фиксировать/удалять файлы на удаленный SVN-сервер по одному, если захочу. Раньше, когда у меня было медленное соединение, я мог загружать папку за раз, и она отлично работала. Я мог бы использовать что-то подобное в git.Можно ли вытащить репозиторий git в разделы?

+0

Вы пробовали? Git сжимает все (и так далее), таким образом, есть хороший шанс, что он будет работать и на медленных соединениях. – KingCrunch

+0

В дополнение к ответам ниже, в зависимости от используемых вами протоколов, 'git push' довольно хорош как для сжатия передачи, так и для разработки минимального количества данных для отправки, чтобы обеспечить синхронизацию. – simont

ответ

1

Когда вы делаете ГИТ-толчок (1), руководство говорит:

<src> часто название отрасли вы хотели бы, чтобы толкать, но он может быть любым произвольным «SHA-1 выражение ", например, master ~ 4 или HEAD (см. gitrevisions (7)).

В результате вы можете подтолкнуть отдельные коммиты к удаленному устройству, организовав их в хронологическом порядке, а затем указывая каждый в подробном рефспете. Например:

# Get all commits not in remotes/origin/master and 
# sort in chronological order. 
commits_list=$(
    git log --oneline --reverse refs/remotes/origin/master..HEAD | 
    awk '{print $1}' 
) 

# Push each commit one-by-one to origin/master. 
for commit in $commits_list; do 
    git push origin $commit:refs/heads/master 
done 

Я тестировал это локально, и, похоже, он работает по назначению. Попробуйте; если ничего другого, он заставит вас указывать в правильном направлении.

0

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

Но нажатие отдельных папок/файлов - я уверен, что это невозможно: это скорее противоречит требованию git о том, что commit является атомарным объектом.

Смежные вопросы