diff --git a/CHANGELOG b/CHANGELOG
index c1531cb2ff2757995fc4bb967fa5946ee75ef06b..3e858ed0ca495ea4eaa207e35be6c375d717cdfb 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -13,6 +13,7 @@ v 7.3.0
   - Keyboard shortcuts for productivity (Robert Schilling)
   - API: filter issues by state (Julien Bianchi)
   - Add system hook for ssh key changes
+  - Add blob permalink link (Ciro Santilli)
 
 v 7.2.0
   - Explore page
diff --git a/app/views/projects/blob/_actions.html.haml b/app/views/projects/blob/_actions.html.haml
index cabef3c19fe66b30329b59ca423317889abf5b4d..8587dc4bc6d5dbf346a63083ddb9746b22a53b72 100644
--- a/app/views/projects/blob/_actions.html.haml
+++ b/app/views/projects/blob/_actions.html.haml
@@ -13,6 +13,9 @@
     - else
       = link_to "blame", project_blame_path(@project, @id), class: "btn btn-small" unless @blob.empty?
   = link_to "history", project_commits_path(@project, @id), class: "btn btn-small"
+  - if @ref != @commit.sha
+    = link_to 'permalink', project_blob_path(@project,
+        tree_join(@commit.sha, @path)), class: 'btn btn-small'
 
 - if allowed_tree_edit?
   = link_to '#modal-remove-blob', class: "remove-blob btn btn-small btn-remove", "data-toggle" => "modal" do
diff --git a/features/project/source/browse_files.feature b/features/project/source/browse_files.feature
index f8934da8de5abecd80d7ac00f278a54771e7cca5..a674800ccb8a5dac5d5e7161b2614ca452165966 100644
--- a/features/project/source/browse_files.feature
+++ b/features/project/source/browse_files.feature
@@ -51,3 +51,15 @@ Feature: Project Browse files
   Scenario: I can browse code with Browse Code
     Given I click on history link
     Then I see Browse code link
+
+  # Permalink
+
+  Scenario: I click on the permalink link from a branch ref
+    Given I click on ".gitignore" file in repo
+    And I click on permalink
+    Then I am redirected to the permalink URL
+
+  Scenario: I don't see the permalink link from a SHA ref
+    Given I visit project source page for "6d394385cf567f80a8fd85055db1ab4c5295806f"
+    And I click on ".gitignore" file in repo
+    Then I don't see the permalink link
diff --git a/features/steps/project/browse_files.rb b/features/steps/project/browse_files.rb
index 6fd0c2c2ded5f08b1d1fb80b1bddbbc519282f1a..bd395a0d26e3dff37ef406f31844c06a7bf68fb5 100644
--- a/features/steps/project/browse_files.rb
+++ b/features/steps/project/browse_files.rb
@@ -90,4 +90,17 @@ class ProjectBrowseFiles < Spinach::FeatureSteps
     page.should_not have_link 'Browse File »'
     page.should_not have_link 'Browse Dir »'
   end
+
+  step 'I click on permalink' do
+    click_link 'permalink'
+  end
+
+  step 'I am redirected to the permalink URL' do
+    expect(current_path).to eq(project_blob_path(
+      @project, @project.repository.commit.sha + '/.gitignore'))
+  end
+
+  step "I don't see the permalink link" do
+    expect(page).not_to have_link('permalink')
+  end
 end
diff --git a/features/steps/shared/paths.rb b/features/steps/shared/paths.rb
index 0d06383509f08edcbaa6d22b1ee0a846d8a4f53b..276947dc0609ecb028e82048fa2985edf9893d52 100644
--- a/features/steps/shared/paths.rb
+++ b/features/steps/shared/paths.rb
@@ -269,6 +269,12 @@ module SharedPaths
     visit project_tree_path(@project, "6d39438")
   end
 
+  step 'I visit project source page for' \
+       ' "6d394385cf567f80a8fd85055db1ab4c5295806f"' do
+    visit project_tree_path(@project,
+                            '6d394385cf567f80a8fd85055db1ab4c5295806f')
+  end
+
   step 'I visit project tags page' do
     visit project_tags_path(@project)
   end