Commit 262da845 authored by Thiago Presa's avatar Thiago Presa

Merge branch '11-4-stable-prepare-rc8' into '11-4-stable'

Prepare 11.4 RC8 release

See merge request gitlab-org/gitlab-ce!22452
parents 59613191 1c2f95fb
.tree-content-holder.js-tree-content{ 'data-logs-path': @logs_path }
%table.table#tree-slider{ class: "table_#{@hex_path} tree-table" }
%table.table#tree-slider{ class: "table_#{@hex_path} tree-table qa-file-tree" }
%th= s_('ProjectFileTree|Name')
description: "Set and configure Git protocol v2"
# Configuring Git Protocol v2
> [Introduced]( in GitLab 11.4.
Git protocol v2 improves the v1 wire protocol in several ways and is
enabled by default in GitLab for HTTP requests. In order to enable SSH,
further configuration is needed by the administrator.
More details about the new features and improvements are available in
the [Google Open Source Blog](
and the [protocol documentation](
## Requirements
From the client side, `git` `v2.18.0` or newer must be installed.
From the server side, if we want to configure SSH we need to set the `sshd`
server to accept the `GIT_PROTOCOL` environment,
# /etc/ssh/sshd_config
Once configured, restart the SSH daemon. In Ubuntu, run:
sudo service ssh restart
## Instructions
In order to use the new protocol, clients need to either pass the configuration
`-c protocol.version=2` to the git command, or set it globally:
git config --global protocol.version 2
### HTTP connections
Verify Git v2 is used by the client:
GIT_TRACE_CURL=1 git -c protocol.version=2 ls-remote 2>&1 | grep Git-Protocol
You should see that the `Git-Protocol` header is sent:
16:29:44.577888 http.c:657 => Send header: Git-Protocol: version=2
Verify Git v2 is used by the server:
GIT_TRACE_PACKET=1 git -c protocol.version=2 ls-remote 2>&1 | head
Example response using Git protocol v2:
$ GIT_TRACE_PACKET=1 git -c protocol.version=2 ls-remote 2>&1 | head
10:42:50.574485 pkt-line.c:80 packet: git< # service=git-upload-pack
10:42:50.574653 pkt-line.c:80 packet: git< 0000
10:42:50.574673 pkt-line.c:80 packet: git< version 2
10:42:50.574679 pkt-line.c:80 packet: git< agent=git/2.18.1
10:42:50.574684 pkt-line.c:80 packet: git< ls-refs
10:42:50.574688 pkt-line.c:80 packet: git< fetch=shallow
10:42:50.574693 pkt-line.c:80 packet: git< server-option
10:42:50.574697 pkt-line.c:80 packet: git< 0000
10:42:50.574817 pkt-line.c:80 packet: git< version 2
10:42:50.575308 pkt-line.c:80 packet: git< agent=git/2.18.1
### SSH Connections
Verify Git v2 is used by the client:
GIT_SSH_COMMAND="ssh -v" git -c protocol.version=2 ls-remote ssh:// 2>&1 |grep GIT_PROTOCOL
You should see that the `GIT_PROTOCOL` environment variable is sent:
debug1: Sending env GIT_PROTOCOL = version=2
For the server side, you can use the [same examples from HTTP](#http-connections), changing the
URL to use SSH.
......@@ -131,6 +131,7 @@ created in snippets, wikis, and repos.
- [Custom Git hooks]( Custom Git hooks (on the filesystem) for when webhooks aren't enough.
- [Git LFS configuration](../workflow/lfs/ Learn how to configure LFS for GitLab.
- [Housekeeping]( Keep your Git repositories tidy and fast.
- [Configuring Git Protocol v2]( Git protocol version 2 support.
## Monitoring GitLab
......@@ -30,6 +30,14 @@ module QA
@directory = dir
def files=(files)
if !files.is_a?(Array) || files.empty?
raise ArgumentError, "Please provide an array of hashes e.g.: [{name: 'file1', content: 'foo'}]"
@files = files
def fabricate!
Git::Repository.perform do |repository|
if ssh_key
......@@ -63,6 +71,10 @@ module QA
@directory.each_child do |f|
repository.add_file(f.basename, if f.file?
elsif @files
@files.each do |f|
repository.add_file(f[:name], f[:content])
repository.add_file(file_name, file_content)
......@@ -35,6 +35,10 @@ module QA
element :new_file_button, "_('New file'),"
view 'app/views/projects/tree/_tree_content.html.haml' do
element :file_tree
def project_name
......@@ -43,6 +47,12 @@ module QA
click_on 'New file'
def go_to_file(filename)
within_element(:file_tree) do
click_on filename
def switch_to_branch(branch_name)
# frozen_string_literal: true
describe QA::Factory::Repository::Push do
describe '.files=' do
let(:files) do
name: 'file.txt',
content: 'foo'
it 'raises an error if files is not an array' do
expect { subject.files = '' }.to raise_error(ArgumentError)
it 'raises an error if files is an empty array' do
expect { subject.files = [] }.to raise_error(ArgumentError)
it 'does not raise if files is an array' do
expect { subject.files = files }.not_to raise_error
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment