initial import from rails to sinatra
|
@ -0,0 +1,2 @@
|
||||||
|
local.db
|
||||||
|
.bundle
|
|
@ -0,0 +1,20 @@
|
||||||
|
source "http://rubygems.org"
|
||||||
|
|
||||||
|
gem "sinatra"
|
||||||
|
gem "dm-core"
|
||||||
|
gem "dm-serializer"
|
||||||
|
gem "dm-migrations"
|
||||||
|
gem "dm-validations"
|
||||||
|
gem "dm-timestamps"
|
||||||
|
|
||||||
|
group :production do
|
||||||
|
gem "pg"
|
||||||
|
gem "dm-postgres-adapter"
|
||||||
|
end
|
||||||
|
|
||||||
|
group :development do
|
||||||
|
gem "sqlite3-ruby"
|
||||||
|
gem "dm-sqlite-adapter"
|
||||||
|
gem "shotgun"
|
||||||
|
end
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
GEM
|
||||||
|
remote: http://rubygems.org/
|
||||||
|
specs:
|
||||||
|
addressable (2.2.6)
|
||||||
|
data_objects (0.10.6)
|
||||||
|
addressable (~> 2.1)
|
||||||
|
dm-core (1.1.0)
|
||||||
|
addressable (~> 2.2.4)
|
||||||
|
dm-do-adapter (1.1.0)
|
||||||
|
data_objects (~> 0.10.2)
|
||||||
|
dm-core (~> 1.1.0)
|
||||||
|
dm-migrations (1.1.0)
|
||||||
|
dm-core (~> 1.1.0)
|
||||||
|
dm-postgres-adapter (1.1.0)
|
||||||
|
dm-do-adapter (~> 1.1.0)
|
||||||
|
do_postgres (~> 0.10.2)
|
||||||
|
dm-serializer (1.1.0)
|
||||||
|
dm-core (~> 1.1.0)
|
||||||
|
fastercsv (~> 1.5.4)
|
||||||
|
json (~> 1.4.6)
|
||||||
|
dm-sqlite-adapter (1.1.0)
|
||||||
|
dm-do-adapter (~> 1.1.0)
|
||||||
|
do_sqlite3 (~> 0.10.2)
|
||||||
|
dm-timestamps (1.1.0)
|
||||||
|
dm-core (~> 1.1.0)
|
||||||
|
dm-validations (1.1.0)
|
||||||
|
dm-core (~> 1.1.0)
|
||||||
|
do_postgres (0.10.6)
|
||||||
|
data_objects (= 0.10.6)
|
||||||
|
do_sqlite3 (0.10.6)
|
||||||
|
data_objects (= 0.10.6)
|
||||||
|
fastercsv (1.5.4)
|
||||||
|
json (1.4.6)
|
||||||
|
pg (0.11.0)
|
||||||
|
rack (1.3.3)
|
||||||
|
shotgun (0.9)
|
||||||
|
rack (>= 1.0)
|
||||||
|
sinatra (1.2.6)
|
||||||
|
rack (~> 1.1)
|
||||||
|
tilt (>= 1.2.2, < 2.0)
|
||||||
|
sqlite3 (1.3.4)
|
||||||
|
sqlite3-ruby (1.3.3)
|
||||||
|
sqlite3 (>= 1.3.3)
|
||||||
|
tilt (1.3.3)
|
||||||
|
|
||||||
|
PLATFORMS
|
||||||
|
ruby
|
||||||
|
|
||||||
|
DEPENDENCIES
|
||||||
|
dm-core
|
||||||
|
dm-migrations
|
||||||
|
dm-postgres-adapter
|
||||||
|
dm-serializer
|
||||||
|
dm-sqlite-adapter
|
||||||
|
dm-timestamps
|
||||||
|
dm-validations
|
||||||
|
pg
|
||||||
|
shotgun
|
||||||
|
sinatra
|
||||||
|
sqlite3-ruby
|
|
@ -0,0 +1,46 @@
|
||||||
|
require 'sinatra'
|
||||||
|
|
||||||
|
require 'dm-core'
|
||||||
|
require 'dm-serializer/to_json'
|
||||||
|
require 'dm-migrations'
|
||||||
|
require 'dm-validations'
|
||||||
|
require 'dm-timestamps'
|
||||||
|
|
||||||
|
## -- DATABASE STUFF --
|
||||||
|
|
||||||
|
DataMapper.setup(:default, ENV['DATABASE_URL'] || "sqlite3://#{Dir.pwd}/local.db")
|
||||||
|
|
||||||
|
class Version
|
||||||
|
include DataMapper::Resource
|
||||||
|
property :version, String
|
||||||
|
property :current, Boolean, :key => true
|
||||||
|
property :created_at, DateTime
|
||||||
|
end
|
||||||
|
|
||||||
|
DataMapper.auto_upgrade!
|
||||||
|
|
||||||
|
class GitApp < Sinatra::Base
|
||||||
|
|
||||||
|
def get_version
|
||||||
|
@version = '1.7.6.1'
|
||||||
|
@date = "2011-08-24"
|
||||||
|
end
|
||||||
|
|
||||||
|
get '/' do
|
||||||
|
get_version
|
||||||
|
erb :index
|
||||||
|
end
|
||||||
|
|
||||||
|
get '/course/:action' do
|
||||||
|
@action = params[:action]
|
||||||
|
@action.gsub!('.html', '')
|
||||||
|
erb :"#{@action}", :layout => :course
|
||||||
|
end
|
||||||
|
|
||||||
|
get '/:action' do
|
||||||
|
@action = params[:action]
|
||||||
|
get_version if @action == 'download'
|
||||||
|
erb :"#{@action}"
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
|
@ -0,0 +1,12 @@
|
||||||
|
require "rubygems"
|
||||||
|
require "bundler"
|
||||||
|
Bundler.setup
|
||||||
|
|
||||||
|
Bundler.require(:runtime)
|
||||||
|
|
||||||
|
require './app'
|
||||||
|
|
||||||
|
use Rack::Static, :urls => ["/css", "/images", "/js"], :root => "public"
|
||||||
|
|
||||||
|
run GitApp
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||||
|
<title>The page you were looking for doesn't exist (404)</title>
|
||||||
|
<style type="text/css">
|
||||||
|
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
||||||
|
div.dialog {
|
||||||
|
width: 25em;
|
||||||
|
padding: 0 4em;
|
||||||
|
margin: 4em auto 0 auto;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-right-color: #999;
|
||||||
|
border-bottom-color: #999;
|
||||||
|
}
|
||||||
|
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- This file lives in public/404.html -->
|
||||||
|
<div class="dialog">
|
||||||
|
<h1>The page you were looking for doesn't exist.</h1>
|
||||||
|
<p>You may have mistyped the address or the page may have moved.</p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,30 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||||
|
<title>The change you wanted was rejected (422)</title>
|
||||||
|
<style type="text/css">
|
||||||
|
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
||||||
|
div.dialog {
|
||||||
|
width: 25em;
|
||||||
|
padding: 0 4em;
|
||||||
|
margin: 4em auto 0 auto;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-right-color: #999;
|
||||||
|
border-bottom-color: #999;
|
||||||
|
}
|
||||||
|
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- This file lives in public/422.html -->
|
||||||
|
<div class="dialog">
|
||||||
|
<h1>The change you wanted was rejected.</h1>
|
||||||
|
<p>Maybe you tried to change something you didn't have access to.</p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,30 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||||
|
<title>We're sorry, but something went wrong (500)</title>
|
||||||
|
<style type="text/css">
|
||||||
|
body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
|
||||||
|
div.dialog {
|
||||||
|
width: 25em;
|
||||||
|
padding: 0 4em;
|
||||||
|
margin: 4em auto 0 auto;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-right-color: #999;
|
||||||
|
border-bottom-color: #999;
|
||||||
|
}
|
||||||
|
h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<!-- This file lives in public/500.html -->
|
||||||
|
<div class="dialog">
|
||||||
|
<h1>We're sorry, but something went wrong.</h1>
|
||||||
|
<p>We've been notified about this issue and we'll take a look at it shortly.</p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,22 @@
|
||||||
|
/* -----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Blueprint CSS Framework 0.7.1
|
||||||
|
http://blueprintcss.googlecode.com
|
||||||
|
|
||||||
|
* Copyright (c) 2007-2008. See LICENSE for more info.
|
||||||
|
* See README for instructions on how to use Blueprint.
|
||||||
|
* For credits and origins, see AUTHORS.
|
||||||
|
* This is a compressed file. See the sources in the 'src' directory.
|
||||||
|
|
||||||
|
----------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* ie.css */
|
||||||
|
body {text-align:center;}
|
||||||
|
.container {text-align:left;}
|
||||||
|
* html .column {overflow-x:hidden;}
|
||||||
|
* html legend {margin:-18px -8px 16px 0;padding:0;}
|
||||||
|
ol {margin-left:2em;}
|
||||||
|
sup {vertical-align:text-top;}
|
||||||
|
sub {vertical-align:text-bottom;}
|
||||||
|
html>body p code {*white-space:normal;}
|
||||||
|
hr {margin:-8px auto 11px;}
|
|
@ -0,0 +1,14 @@
|
||||||
|
Fancy Type
|
||||||
|
|
||||||
|
* Gives you classes to use if you'd like some
|
||||||
|
extra fancy typography.
|
||||||
|
|
||||||
|
Credits and instructions are specified above each class
|
||||||
|
in the fancy-type.css file in this directory.
|
||||||
|
|
||||||
|
|
||||||
|
Usage
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
1) Add this plugin to lib/settings.yml.
|
||||||
|
See compress.rb for instructions.
|
|
@ -0,0 +1,71 @@
|
||||||
|
/* --------------------------------------------------------------
|
||||||
|
|
||||||
|
fancy-type.css
|
||||||
|
* Lots of pretty advanced classes for manipulating text.
|
||||||
|
|
||||||
|
See the Readme file in this folder for additional instructions.
|
||||||
|
|
||||||
|
-------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Indentation instead of line shifts for sibling paragraphs. */
|
||||||
|
p + p { text-indent:2em; margin-top:-1.5em; }
|
||||||
|
form p + p { text-indent: 0; } /* Don't want this in forms. */
|
||||||
|
|
||||||
|
|
||||||
|
/* For great looking type, use this code instead of asdf:
|
||||||
|
<span class="alt">asdf</span>
|
||||||
|
Best used on prepositions and ampersands. */
|
||||||
|
|
||||||
|
.alt {
|
||||||
|
color: #666;
|
||||||
|
font-family: "Warnock Pro", "Goudy Old Style","Palatino","Book Antiqua", Georgia, serif;
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* For great looking quote marks in titles, replace "asdf" with:
|
||||||
|
<span class="dquo">“</span>asdf”
|
||||||
|
(That is, when the title starts with a quote mark).
|
||||||
|
(You may have to change this value depending on your font size). */
|
||||||
|
|
||||||
|
.dquo { margin-left: -.5em; }
|
||||||
|
|
||||||
|
|
||||||
|
/* Reduced size type with incremental leading
|
||||||
|
(http://www.markboulton.co.uk/journal/comments/incremental_leading/)
|
||||||
|
|
||||||
|
This could be used for side notes. For smaller type, you don't necessarily want to
|
||||||
|
follow the 1.5x vertical rhythm -- the line-height is too much.
|
||||||
|
|
||||||
|
Using this class, it reduces your font size and line-height so that for
|
||||||
|
every four lines of normal sized type, there is five lines of the sidenote. eg:
|
||||||
|
|
||||||
|
New type size in em's:
|
||||||
|
10px (wanted side note size) / 12px (existing base size) = 0.8333 (new type size in ems)
|
||||||
|
|
||||||
|
New line-height value:
|
||||||
|
12px x 1.5 = 18px (old line-height)
|
||||||
|
18px x 4 = 72px
|
||||||
|
72px / 5 = 14.4px (new line height)
|
||||||
|
14.4px / 10px = 1.44 (new line height in em's) */
|
||||||
|
|
||||||
|
p.incr, .incr p {
|
||||||
|
font-size: 10px;
|
||||||
|
line-height: 1.44em;
|
||||||
|
margin-bottom: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Surround uppercase words and abbreviations with this class.
|
||||||
|
Based on work by Jørgen Arnor Gårdsø Lom [http://twistedintellect.com/] */
|
||||||
|
|
||||||
|
.caps {
|
||||||
|
font-variant: small-caps;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
text-transform: lowercase;
|
||||||
|
font-size:1.2em;
|
||||||
|
line-height:1%;
|
||||||
|
font-weight:bold;
|
||||||
|
padding:0 2px;
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
/* -----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Blueprint CSS Framework 0.7.1
|
||||||
|
http://blueprintcss.googlecode.com
|
||||||
|
|
||||||
|
* Copyright (c) 2007-2008. See LICENSE for more info.
|
||||||
|
* See README for instructions on how to use Blueprint.
|
||||||
|
* For credits and origins, see AUTHORS.
|
||||||
|
* This is a compressed file. See the sources in the 'src' directory.
|
||||||
|
|
||||||
|
----------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* print.css */
|
||||||
|
body {line-height:1.5;font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;color:#000;background:none;font-size:10pt;}
|
||||||
|
.container {background:none;}
|
||||||
|
hr {background:#ccc;color:#ccc;width:100%;height:2px;margin:2em 0;padding:0;border:none;}
|
||||||
|
hr.space {background:#fff;color:#fff;}
|
||||||
|
h1, h2, h3, h4, h5, h6 {font-family:"Helvetica Neue", Arial, "Lucida Grande", sans-serif;}
|
||||||
|
code {font:.9em "Courier New", Monaco, Courier, monospace;}
|
||||||
|
img {float:left;margin:1.5em 1.5em 1.5em 0;}
|
||||||
|
a img {border:none;}
|
||||||
|
p img.top {margin-top:0;}
|
||||||
|
blockquote {margin:1.5em;padding:1em;font-style:italic;font-size:.9em;}
|
||||||
|
.small {font-size:.9em;}
|
||||||
|
.large {font-size:1.1em;}
|
||||||
|
.quiet {color:#999;}
|
||||||
|
.hide {display:none;}
|
||||||
|
a:link, a:visited {background:transparent;font-weight:700;text-decoration:underline;}
|
||||||
|
a:link:after, a:visited:after {content:" (" attr(href) ") ";font-size:90%;}
|
|
@ -0,0 +1,225 @@
|
||||||
|
/*
|
||||||
|
BLUEPRINT CSS
|
||||||
|
* Filename: compressed.css
|
||||||
|
* Version: 0.7.1 (2008-02-25) YYYY-MM-DD
|
||||||
|
* Website: http://code.google.com/p/blueprintcss/
|
||||||
|
|
||||||
|
Generated by:
|
||||||
|
* Blueprint CSS Grid Generator (2008-07-22) [http://kematzy.com/blueprint-generator/]
|
||||||
|
|
||||||
|
== STRUCTURE: ========================
|
||||||
|
* Page width: 788 px
|
||||||
|
* Number of columns: 21
|
||||||
|
* Column width: 28 px
|
||||||
|
* Margin width: 10 px
|
||||||
|
======================================
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* reset.css */
|
||||||
|
html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {margin:0;padding:0;border:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline;}
|
||||||
|
body {line-height:1.5;}
|
||||||
|
table {border-collapse:separate;border-spacing:0;}
|
||||||
|
caption, th, td {text-align:left;font-weight:normal;}
|
||||||
|
table, td, th {vertical-align:middle;}
|
||||||
|
blockquote:before, blockquote:after, q:before, q:after {content:"";}
|
||||||
|
blockquote, q {quotes:"" "";}
|
||||||
|
a img {border:none;}
|
||||||
|
|
||||||
|
/* typography.css */
|
||||||
|
body {font-size:75%;color:#222;background:#fff;font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;}
|
||||||
|
h1, h2, h3, h4, h5, h6 {font-weight:normal;color:#111;}
|
||||||
|
h1 {font-size:3em;line-height:1;margin-bottom:0.5em;}
|
||||||
|
h2 {font-size:2em;margin-bottom:0.75em;}
|
||||||
|
h3 {font-size:1.5em;line-height:1;margin-bottom:1em;}
|
||||||
|
h4 {font-size:1.2em;line-height:1.25;margin-bottom:1.25em;height:1.25em;}
|
||||||
|
h5 {font-size:1em;font-weight:bold;margin-bottom:1.5em;}
|
||||||
|
h6 {font-size:1em;font-weight:bold;}
|
||||||
|
h1 img, h2 img, h3 img, h4 img, h5 img, h6 img {margin:0;}
|
||||||
|
p {margin:0 0 1.5em;}
|
||||||
|
p img {float:left;margin:1.5em 1.5em 1.5em 0;padding:0;}
|
||||||
|
p img.right {float:right;margin:1.5em 0 1.5em 1.5em;}
|
||||||
|
a:focus, a:hover {color:#000;}
|
||||||
|
a {color:#009;text-decoration:underline;}
|
||||||
|
blockquote {margin:1.5em;color:#666;font-style:italic;}
|
||||||
|
strong {font-weight:bold;}
|
||||||
|
em, dfn {font-style:italic;}
|
||||||
|
dfn {font-weight:bold;}
|
||||||
|
sup, sub {line-height:0;}
|
||||||
|
abbr, acronym {border-bottom:1px dotted #666;}
|
||||||
|
address {margin:0 0 1.5em;font-style:italic;}
|
||||||
|
del {color:#666;}
|
||||||
|
pre, code {margin:1.5em 0;white-space:pre;}
|
||||||
|
pre, code, tt {font:1em 'andale mono', 'lucida console', monospace;line-height:1.5;}
|
||||||
|
li ul, li ol {margin:0 1.5em;}
|
||||||
|
ul, ol {margin:0 1.5em 1.5em 1.5em;}
|
||||||
|
ul {list-style-type:disc;}
|
||||||
|
ol {list-style-type:decimal;}
|
||||||
|
dl {margin:0 0 1.5em 0;}
|
||||||
|
dl dt {font-weight:bold;}
|
||||||
|
dd {margin-left:1.5em;}
|
||||||
|
table {margin-bottom:1.4em;width:100%;}
|
||||||
|
th {font-weight:bold;background:#C3D9FF;}
|
||||||
|
th, td {padding:4px 10px 4px 5px;}
|
||||||
|
tr.even td {background:#E5ECF9;}
|
||||||
|
tfoot {font-style:italic;}
|
||||||
|
caption {background:#eee;}
|
||||||
|
.small {font-size:.8em;margin-bottom:1.875em;line-height:1.875em;}
|
||||||
|
.large {font-size:1.2em;line-height:2.5em;margin-bottom:1.25em;}
|
||||||
|
.hide {display:none;}
|
||||||
|
.quiet {color:#666;}
|
||||||
|
.loud {color:#000;}
|
||||||
|
.highlight {background:#ff0;}
|
||||||
|
.added {background:#060;color:#fff;}
|
||||||
|
.removed {background:#900;color:#fff;}
|
||||||
|
.first {margin-left:0;padding-left:0;}
|
||||||
|
.last {margin-right:0;padding-right:0;}
|
||||||
|
.top {margin-top:0;padding-top:0;}
|
||||||
|
.bottom {margin-bottom:0;padding-bottom:0;}
|
||||||
|
|
||||||
|
/* grid.css */
|
||||||
|
.container {width:788px;margin:0 auto;}
|
||||||
|
.showgrid {background:url(src/grid.png);}
|
||||||
|
body {margin:1.5em 0;}
|
||||||
|
div.span-1, div.span-2, div.span-3, div.span-4, div.span-5, div.span-6, div.span-7, div.span-8, div.span-9, div.span-10, div.span-11, div.span-12, div.span-13, div.span-14, div.span-15, div.span-16, div.span-17, div.span-18, div.span-19, div.span-20, div.span-21 {float:left;margin-right: 10px;}
|
||||||
|
|
||||||
|
div.last {margin-right:0;}
|
||||||
|
.span-1 { width: 28px;}
|
||||||
|
.span-2 { width: 66px;}
|
||||||
|
.span-3 { width: 104px;}
|
||||||
|
.span-4 { width: 142px;}
|
||||||
|
.span-5 { width: 180px;}
|
||||||
|
.span-6 { width: 218px;}
|
||||||
|
.span-7 { width: 256px;}
|
||||||
|
.span-8 { width: 294px;}
|
||||||
|
.span-9 { width: 332px;}
|
||||||
|
.span-10 { width: 370px;}
|
||||||
|
.span-11 { width: 408px;}
|
||||||
|
.span-12 { width: 446px;}
|
||||||
|
.span-13 { width: 484px;}
|
||||||
|
.span-14 { width: 522px;}
|
||||||
|
.span-15 { width: 560px;}
|
||||||
|
.span-16 { width: 598px;}
|
||||||
|
.span-17 { width: 636px;}
|
||||||
|
.span-18 { width: 674px;}
|
||||||
|
.span-19 { width: 712px;}
|
||||||
|
.span-20 { width: 750px;}
|
||||||
|
.span-21, div.span-21 { width: 788px; margin: 0; }
|
||||||
|
|
||||||
|
.append-1 { padding-right: 38px;}
|
||||||
|
.append-2 { padding-right: 76px;}
|
||||||
|
.append-3 { padding-right: 114px;}
|
||||||
|
.append-4 { padding-right: 152px;}
|
||||||
|
.append-5 { padding-right: 190px;}
|
||||||
|
.append-6 { padding-right: 228px;}
|
||||||
|
.append-7 { padding-right: 266px;}
|
||||||
|
.append-8 { padding-right: 304px;}
|
||||||
|
.append-9 { padding-right: 342px;}
|
||||||
|
.append-10 { padding-right: 380px;}
|
||||||
|
.append-11 { padding-right: 418px;}
|
||||||
|
.append-12 { padding-right: 456px;}
|
||||||
|
.append-13 { padding-right: 494px;}
|
||||||
|
.append-14 { padding-right: 532px;}
|
||||||
|
.append-15 { padding-right: 570px;}
|
||||||
|
.append-16 { padding-right: 608px;}
|
||||||
|
.append-17 { padding-right: 646px;}
|
||||||
|
.append-18 { padding-right: 684px;}
|
||||||
|
.append-19 { padding-right: 722px;}
|
||||||
|
.append-20 { padding-right: 760px;}
|
||||||
|
|
||||||
|
.prepend-1 { padding-left: 38px;}
|
||||||
|
.prepend-2 { padding-left: 76px;}
|
||||||
|
.prepend-3 { padding-left: 114px;}
|
||||||
|
.prepend-4 { padding-left: 152px;}
|
||||||
|
.prepend-5 { padding-left: 190px;}
|
||||||
|
.prepend-6 { padding-left: 228px;}
|
||||||
|
.prepend-7 { padding-left: 266px;}
|
||||||
|
.prepend-8 { padding-left: 304px;}
|
||||||
|
.prepend-9 { padding-left: 342px;}
|
||||||
|
.prepend-10 { padding-left: 380px;}
|
||||||
|
.prepend-11 { padding-left: 418px;}
|
||||||
|
.prepend-12 { padding-left: 456px;}
|
||||||
|
.prepend-13 { padding-left: 494px;}
|
||||||
|
.prepend-14 { padding-left: 532px;}
|
||||||
|
.prepend-15 { padding-left: 570px;}
|
||||||
|
.prepend-16 { padding-left: 608px;}
|
||||||
|
.prepend-17 { padding-left: 646px;}
|
||||||
|
.prepend-18 { padding-left: 684px;}
|
||||||
|
.prepend-19 { padding-left: 722px;}
|
||||||
|
.prepend-20 { padding-left: 760px;}
|
||||||
|
|
||||||
|
div.border{padding-right:4px;margin-right:5px;border-right:1px solid #eee;}
|
||||||
|
div.colborder { padding-right:24px;margin-right:23px;border-right:1px solid #eee;}
|
||||||
|
.pull-1 { margin-left: -38px;}
|
||||||
|
.pull-2 { margin-left: -76px;}
|
||||||
|
.pull-3 { margin-left: -114px;}
|
||||||
|
.pull-4 { margin-left: -152px;}
|
||||||
|
.pull-5 { margin-left: -190px;}
|
||||||
|
.pull-6 { margin-left: -228px;}
|
||||||
|
.pull-7 { margin-left: -266px;}
|
||||||
|
.pull-8 { margin-left: -304px;}
|
||||||
|
.pull-9 { margin-left: -342px;}
|
||||||
|
.pull-10 { margin-left: -380px;}
|
||||||
|
.pull-11 { margin-left: -418px;}
|
||||||
|
.pull-12 { margin-left: -456px;}
|
||||||
|
.pull-13 { margin-left: -494px;}
|
||||||
|
.pull-14 { margin-left: -532px;}
|
||||||
|
.pull-15 { margin-left: -570px;}
|
||||||
|
.pull-16 { margin-left: -608px;}
|
||||||
|
.pull-17 { margin-left: -646px;}
|
||||||
|
.pull-18 { margin-left: -684px;}
|
||||||
|
.pull-19 { margin-left: -722px;}
|
||||||
|
.pull-20 { margin-left: -760px;}
|
||||||
|
.pull-21 { margin-left: -798px;}
|
||||||
|
|
||||||
|
.pull-1, .pull-2, .pull-3, .pull-4, .pull-5, .pull-6, .pull-7, .pull-8, .pull-9, .pull-10, .pull-11, .pull-12, .pull-13, .pull-14, .pull-15, .pull-16, .pull-17, .pull-18, .pull-19, .pull-20, .pull-21 {float:left;position:relative;}
|
||||||
|
|
||||||
|
.push-1 { margin: 0 -38px 1.5em 38px;}
|
||||||
|
.push-2 { margin: 0 -76px 1.5em 76px;}
|
||||||
|
.push-3 { margin: 0 -114px 1.5em 114px;}
|
||||||
|
.push-4 { margin: 0 -152px 1.5em 152px;}
|
||||||
|
.push-5 { margin: 0 -190px 1.5em 190px;}
|
||||||
|
.push-6 { margin: 0 -228px 1.5em 228px;}
|
||||||
|
.push-7 { margin: 0 -266px 1.5em 266px;}
|
||||||
|
.push-8 { margin: 0 -304px 1.5em 304px;}
|
||||||
|
.push-9 { margin: 0 -342px 1.5em 342px;}
|
||||||
|
.push-10 { margin: 0 -380px 1.5em 380px;}
|
||||||
|
.push-11 { margin: 0 -418px 1.5em 418px;}
|
||||||
|
.push-12 { margin: 0 -456px 1.5em 456px;}
|
||||||
|
.push-13 { margin: 0 -494px 1.5em 494px;}
|
||||||
|
.push-14 { margin: 0 -532px 1.5em 532px;}
|
||||||
|
.push-15 { margin: 0 -570px 1.5em 570px;}
|
||||||
|
.push-16 { margin: 0 -608px 1.5em 608px;}
|
||||||
|
.push-17 { margin: 0 -646px 1.5em 646px;}
|
||||||
|
.push-18 { margin: 0 -684px 1.5em 684px;}
|
||||||
|
.push-19 { margin: 0 -722px 1.5em 722px;}
|
||||||
|
.push-20 { margin: 0 -760px 1.5em 760px;}
|
||||||
|
.push-21 { margin: 0 -798px 1.5em 798px;}
|
||||||
|
|
||||||
|
.push-1, .push-2, .push-3, .push-4, .push-5, .push-6, .push-7, .push-8, .push-9, .push-10, .push-11, .push-12, .push-13, .push-14, .push-15, .push-16, .push-17, .push-18, .push-19, .push-20, .push-21 {float:right;position:relative;}
|
||||||
|
|
||||||
|
.box {padding:1.5em;margin-bottom:1.5em;background:#E5ECF9;}
|
||||||
|
hr {background:#ddd;color:#ddd;clear:both;float:none;width:100%;height:.1em;margin:0 0 1.45em;border:none;}
|
||||||
|
hr.space {background:#fff;color:#fff;}
|
||||||
|
.clearfix:after, .container:after {content:".";display:block;height:0;clear:both;visibility:hidden;}
|
||||||
|
.clearfix, .container {display:inline-block;}
|
||||||
|
* html .clearfix, * html .container {height:1%;}
|
||||||
|
.clearfix, .container {display:block;}
|
||||||
|
.clear {clear:both;}
|
||||||
|
|
||||||
|
/* forms.css */
|
||||||
|
label {font-weight:bold;}
|
||||||
|
fieldset {padding:1.4em;margin:0 0 1.5em 0;border:1px solid #ccc;}
|
||||||
|
legend {font-weight:bold;font-size:1.2em;}
|
||||||
|
input.text, input.title, textarea, select {margin:0.5em 0;border:1px solid #bbb;}
|
||||||
|
input.text:focus, input.title:focus, textarea:focus, select:focus {border:1px solid #666;}
|
||||||
|
input.text, input.title {width:300px;padding:5px;}
|
||||||
|
input.title {font-size:1.5em;}
|
||||||
|
textarea {width:390px;height:250px;padding:5px;}
|
||||||
|
.error, .notice, .success {padding:.8em;margin-bottom:1em;border:2px solid #ddd;}
|
||||||
|
.error {background:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;}
|
||||||
|
.notice {background:#FFF6BF;color:#514721;border-color:#FFD324;}
|
||||||
|
.success {background:#E6EFC2;color:#264409;border-color:#C6D880;}
|
||||||
|
.error a {color:#8a1f11;}
|
||||||
|
.notice a {color:#514721;}
|
||||||
|
.success a {color:#264409;}
|
|
@ -0,0 +1,49 @@
|
||||||
|
/* --------------------------------------------------------------
|
||||||
|
|
||||||
|
forms.css
|
||||||
|
* Sets up some default styling for forms
|
||||||
|
* Gives you classes to enhance your forms
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
* For text fields, use class .title or .text
|
||||||
|
|
||||||
|
-------------------------------------------------------------- */
|
||||||
|
|
||||||
|
label { font-weight: bold; }
|
||||||
|
fieldset { padding:1.4em; margin: 0 0 1.5em 0; border: 1px solid #ccc; }
|
||||||
|
legend { font-weight: bold; font-size:1.2em; }
|
||||||
|
|
||||||
|
|
||||||
|
/* Form fields
|
||||||
|
-------------------------------------------------------------- */
|
||||||
|
|
||||||
|
input.text, input.title,
|
||||||
|
textarea, select {
|
||||||
|
margin:0.5em 0;
|
||||||
|
border:1px solid #bbb;
|
||||||
|
}
|
||||||
|
|
||||||
|
input.text:focus, input.title:focus,
|
||||||
|
textarea:focus, select:focus {
|
||||||
|
border:1px solid #666;
|
||||||
|
}
|
||||||
|
|
||||||
|
input.text,
|
||||||
|
input.title { width: 300px; padding:5px; }
|
||||||
|
input.title { font-size:1.5em; }
|
||||||
|
textarea { width: 390px; height: 250px; padding:5px; }
|
||||||
|
|
||||||
|
|
||||||
|
/* Success, notice and error boxes
|
||||||
|
-------------------------------------------------------------- */
|
||||||
|
|
||||||
|
.error,
|
||||||
|
.notice,
|
||||||
|
.success { padding: .8em; margin-bottom: 1em; border: 2px solid #ddd; }
|
||||||
|
|
||||||
|
.error { background: #FBE3E4; color: #8a1f11; border-color: #FBC2C4; }
|
||||||
|
.notice { background: #FFF6BF; color: #514721; border-color: #FFD324; }
|
||||||
|
.success { background: #E6EFC2; color: #264409; border-color: #C6D880; }
|
||||||
|
.error a { color: #8a1f11; }
|
||||||
|
.notice a { color: #514721; }
|
||||||
|
.success a { color: #264409; }
|
|
@ -0,0 +1,250 @@
|
||||||
|
/* --------------------------------------------------------------
|
||||||
|
|
||||||
|
BLUEPRINT CSS
|
||||||
|
* Filename: grid.css
|
||||||
|
* Version: 0.7.1 (2008-02-25) YYYY-MM-DD
|
||||||
|
* Website: http://code.google.com/p/blueprintcss/
|
||||||
|
|
||||||
|
Generated by:
|
||||||
|
* Blueprint CSS Grid Generator (2008-07-23) [http://kematzy.com/blueprint-generator/]
|
||||||
|
|
||||||
|
Based on work by:
|
||||||
|
* Olav Bjorkoy [bjorkoy.com]
|
||||||
|
* Nathan Borror [playgroundblues.com]
|
||||||
|
* Jeff Croft [jeffcroft.com]
|
||||||
|
* Christian Metts [mintchaos.com]
|
||||||
|
* Khoi Vinh [subtraction.com]
|
||||||
|
|
||||||
|
== STRUCTURE: ========================
|
||||||
|
* Page width: 788 px
|
||||||
|
* Number of columns: 21
|
||||||
|
* Column width: 28 px
|
||||||
|
* Margin width: 10 px
|
||||||
|
======================================
|
||||||
|
|
||||||
|
By default, the grid is 788px wide, with 21 columns
|
||||||
|
spanning 28px, and a 10px margin between columns.
|
||||||
|
|
||||||
|
If you need fewer or more columns, use this formula to calculate
|
||||||
|
the new total width:
|
||||||
|
|
||||||
|
Total width = (number_of_columns * column_width) - margin_width
|
||||||
|
|
||||||
|
Read more about using a grid here:
|
||||||
|
* subtraction.com/archives/2007/0318_oh_yeeaahh.php
|
||||||
|
|
||||||
|
-------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* A container should group all your columns. */
|
||||||
|
.container {
|
||||||
|
width: 788px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Use this class on any div.span / container to see the grid. */
|
||||||
|
.showgrid {
|
||||||
|
background: url(src/grid.png);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Body margin for a sensile default look. */
|
||||||
|
body {
|
||||||
|
margin:1.5em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Columns
|
||||||
|
-------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Sets up basic grid floating and margin. */
|
||||||
|
div.span-1, div.span-2, div.span-3, div.span-4, div.span-5, div.span-6, div.span-7, div.span-8, div.span-9, div.span-10, div.span-11, div.span-12, div.span-13, div.span-14, div.span-15, div.span-16, div.span-17, div.span-18, div.span-19, div.span-20, div.span-21 {float:left;margin-right: 10px;}
|
||||||
|
|
||||||
|
/* The last column in a row needs this class. */
|
||||||
|
div.last { margin-right: 0; }
|
||||||
|
|
||||||
|
/* Use these classes to set the width of a column. */
|
||||||
|
.span-1 { width: 28px;}
|
||||||
|
.span-2 { width: 66px;}
|
||||||
|
.span-3 { width: 104px;}
|
||||||
|
.span-4 { width: 142px;}
|
||||||
|
.span-5 { width: 180px;}
|
||||||
|
.span-6 { width: 218px;}
|
||||||
|
.span-7 { width: 256px;}
|
||||||
|
.span-8 { width: 294px;}
|
||||||
|
.span-9 { width: 332px;}
|
||||||
|
.span-10 { width: 370px;}
|
||||||
|
.span-11 { width: 408px;}
|
||||||
|
.span-12 { width: 446px;}
|
||||||
|
.span-13 { width: 484px;}
|
||||||
|
.span-14 { width: 522px;}
|
||||||
|
.span-15 { width: 560px;}
|
||||||
|
.span-16 { width: 598px;}
|
||||||
|
.span-17 { width: 636px;}
|
||||||
|
.span-18 { width: 674px;}
|
||||||
|
.span-19 { width: 712px;}
|
||||||
|
.span-20 { width: 750px;}
|
||||||
|
.span-21, div.span-21 { width: 788px; margin: 0; }
|
||||||
|
|
||||||
|
|
||||||
|
/* Add these to a column to append empty cols. */
|
||||||
|
.append-1 { padding-right: 38px;}
|
||||||
|
.append-2 { padding-right: 76px;}
|
||||||
|
.append-3 { padding-right: 114px;}
|
||||||
|
.append-4 { padding-right: 152px;}
|
||||||
|
.append-5 { padding-right: 190px;}
|
||||||
|
.append-6 { padding-right: 228px;}
|
||||||
|
.append-7 { padding-right: 266px;}
|
||||||
|
.append-8 { padding-right: 304px;}
|
||||||
|
.append-9 { padding-right: 342px;}
|
||||||
|
.append-10 { padding-right: 380px;}
|
||||||
|
.append-11 { padding-right: 418px;}
|
||||||
|
.append-12 { padding-right: 456px;}
|
||||||
|
.append-13 { padding-right: 494px;}
|
||||||
|
.append-14 { padding-right: 532px;}
|
||||||
|
.append-15 { padding-right: 570px;}
|
||||||
|
.append-16 { padding-right: 608px;}
|
||||||
|
.append-17 { padding-right: 646px;}
|
||||||
|
.append-18 { padding-right: 684px;}
|
||||||
|
.append-19 { padding-right: 722px;}
|
||||||
|
.append-20 { padding-right: 760px;}
|
||||||
|
|
||||||
|
|
||||||
|
/* Add these to a column to prepend empty cols. */
|
||||||
|
.prepend-1 { padding-left: 38px;}
|
||||||
|
.prepend-2 { padding-left: 76px;}
|
||||||
|
.prepend-3 { padding-left: 114px;}
|
||||||
|
.prepend-4 { padding-left: 152px;}
|
||||||
|
.prepend-5 { padding-left: 190px;}
|
||||||
|
.prepend-6 { padding-left: 228px;}
|
||||||
|
.prepend-7 { padding-left: 266px;}
|
||||||
|
.prepend-8 { padding-left: 304px;}
|
||||||
|
.prepend-9 { padding-left: 342px;}
|
||||||
|
.prepend-10 { padding-left: 380px;}
|
||||||
|
.prepend-11 { padding-left: 418px;}
|
||||||
|
.prepend-12 { padding-left: 456px;}
|
||||||
|
.prepend-13 { padding-left: 494px;}
|
||||||
|
.prepend-14 { padding-left: 532px;}
|
||||||
|
.prepend-15 { padding-left: 570px;}
|
||||||
|
.prepend-16 { padding-left: 608px;}
|
||||||
|
.prepend-17 { padding-left: 646px;}
|
||||||
|
.prepend-18 { padding-left: 684px;}
|
||||||
|
.prepend-19 { padding-left: 722px;}
|
||||||
|
.prepend-20 { padding-left: 760px;}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Border on right hand side of a column. */
|
||||||
|
div.border {
|
||||||
|
padding-right:4px;
|
||||||
|
margin-right:5px;
|
||||||
|
border-right: 1px solid #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Border with more whitespace, spans one column. */
|
||||||
|
div.colborder {
|
||||||
|
padding-right:26px;
|
||||||
|
margin-right:23px;
|
||||||
|
border-right: 1px solid #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Use these classes on an element to push it into the
|
||||||
|
next column, or to pull it into the previous column. */
|
||||||
|
|
||||||
|
.pull-1 { margin-left: -38px;}
|
||||||
|
.pull-2 { margin-left: -76px;}
|
||||||
|
.pull-3 { margin-left: -114px;}
|
||||||
|
.pull-4 { margin-left: -152px;}
|
||||||
|
.pull-5 { margin-left: -190px;}
|
||||||
|
.pull-6 { margin-left: -228px;}
|
||||||
|
.pull-7 { margin-left: -266px;}
|
||||||
|
.pull-8 { margin-left: -304px;}
|
||||||
|
.pull-9 { margin-left: -342px;}
|
||||||
|
.pull-10 { margin-left: -380px;}
|
||||||
|
.pull-11 { margin-left: -418px;}
|
||||||
|
.pull-12 { margin-left: -456px;}
|
||||||
|
.pull-13 { margin-left: -494px;}
|
||||||
|
.pull-14 { margin-left: -532px;}
|
||||||
|
.pull-15 { margin-left: -570px;}
|
||||||
|
.pull-16 { margin-left: -608px;}
|
||||||
|
.pull-17 { margin-left: -646px;}
|
||||||
|
.pull-18 { margin-left: -684px;}
|
||||||
|
.pull-19 { margin-left: -722px;}
|
||||||
|
.pull-20 { margin-left: -760px;}
|
||||||
|
.pull-21 { margin-left: -798px;}
|
||||||
|
|
||||||
|
.pull-1, .pull-2, .pull-3, .pull-4, .pull-5, .pull-6, .pull-7, .pull-8, .pull-9, .pull-10, .pull-11, .pull-12, .pull-13, .pull-14, .pull-15, .pull-16, .pull-17, .pull-18, .pull-19, .pull-20, .pull-21 {float:left;position:relative;}
|
||||||
|
|
||||||
|
|
||||||
|
.push-1 { margin: 0 -38px 1.5em 38px;}
|
||||||
|
.push-2 { margin: 0 -76px 1.5em 76px;}
|
||||||
|
.push-3 { margin: 0 -114px 1.5em 114px;}
|
||||||
|
.push-4 { margin: 0 -152px 1.5em 152px;}
|
||||||
|
.push-5 { margin: 0 -190px 1.5em 190px;}
|
||||||
|
.push-6 { margin: 0 -228px 1.5em 228px;}
|
||||||
|
.push-7 { margin: 0 -266px 1.5em 266px;}
|
||||||
|
.push-8 { margin: 0 -304px 1.5em 304px;}
|
||||||
|
.push-9 { margin: 0 -342px 1.5em 342px;}
|
||||||
|
.push-10 { margin: 0 -380px 1.5em 380px;}
|
||||||
|
.push-11 { margin: 0 -418px 1.5em 418px;}
|
||||||
|
.push-12 { margin: 0 -456px 1.5em 456px;}
|
||||||
|
.push-13 { margin: 0 -494px 1.5em 494px;}
|
||||||
|
.push-14 { margin: 0 -532px 1.5em 532px;}
|
||||||
|
.push-15 { margin: 0 -570px 1.5em 570px;}
|
||||||
|
.push-16 { margin: 0 -608px 1.5em 608px;}
|
||||||
|
.push-17 { margin: 0 -646px 1.5em 646px;}
|
||||||
|
.push-18 { margin: 0 -684px 1.5em 684px;}
|
||||||
|
.push-19 { margin: 0 -722px 1.5em 722px;}
|
||||||
|
.push-20 { margin: 0 -760px 1.5em 760px;}
|
||||||
|
.push-21 { margin: 0 -798px 1.5em 798px;}
|
||||||
|
|
||||||
|
.push-1, .push-2, .push-3, .push-4, .push-5, .push-6, .push-7, .push-8, .push-9, .push-10, .push-11, .push-12, .push-13, .push-14, .push-15, .push-16, .push-17, .push-18, .push-19, .push-20, .push-21 {float:right;position:relative;}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Misc classes and elements
|
||||||
|
-------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Use a .box to create a padded box inside a column. */
|
||||||
|
.box {
|
||||||
|
padding: 1.5em;
|
||||||
|
margin-bottom: 1.5em;
|
||||||
|
background: #E5ECF9;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Use this to create a horizontal ruler across a column. */
|
||||||
|
hr {
|
||||||
|
background: #ddd;
|
||||||
|
color: #ddd;
|
||||||
|
clear: both;
|
||||||
|
float: none;
|
||||||
|
width: 100%;
|
||||||
|
height: .1em;
|
||||||
|
margin: 0 0 1.45em;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
hr.space {
|
||||||
|
background: #fff;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Clearing floats without extra markup
|
||||||
|
Based on How To Clear Floats Without Structural Markup by PiE
|
||||||
|
[http://www.positioniseverything.net/easyclearing.html] */
|
||||||
|
|
||||||
|
.clearfix:after, .container:after {
|
||||||
|
content: ".";
|
||||||
|
display: block;
|
||||||
|
height: 0;
|
||||||
|
clear: both;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.clearfix, .container {display: inline-block;}
|
||||||
|
* html .clearfix,
|
||||||
|
* html .container {height: 1%;}
|
||||||
|
.clearfix, .container {display: block;}
|
||||||
|
|
||||||
|
/* Regular clearing
|
||||||
|
apply to column that should drop below previous ones. */
|
||||||
|
|
||||||
|
.clear { clear:both; }
|
||||||
|
|
После Ширина: | Высота: | Размер: 98 B |
|
@ -0,0 +1,35 @@
|
||||||
|
/* --------------------------------------------------------------
|
||||||
|
|
||||||
|
ie.css
|
||||||
|
|
||||||
|
Contains every hack for Internet Explorer,
|
||||||
|
so that our core files stay sweet and nimble.
|
||||||
|
|
||||||
|
-------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Make sure the layout is centered in IE5 */
|
||||||
|
body { text-align: center; }
|
||||||
|
.container { text-align: left; }
|
||||||
|
|
||||||
|
/* Fixes IE margin bugs */
|
||||||
|
* html .column { overflow-x: hidden; }
|
||||||
|
|
||||||
|
|
||||||
|
/* Elements
|
||||||
|
-------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Fixes incorrect styling of legend in IE6. */
|
||||||
|
* html legend { margin:-18px -8px 16px 0; padding:0; }
|
||||||
|
|
||||||
|
/* Fixes incorrect placement of ol numbers in IE6/7. */
|
||||||
|
ol { margin-left:2em; }
|
||||||
|
|
||||||
|
/* Fixes wrong line-height on sup/sub in IE. */
|
||||||
|
sup { vertical-align: text-top; }
|
||||||
|
sub { vertical-align: text-bottom; }
|
||||||
|
|
||||||
|
/* Fixes IE7 missing wrapping of code elements. */
|
||||||
|
html>body p code { *white-space: normal; }
|
||||||
|
|
||||||
|
/* IE 6&7 has problems with setting proper <hr> margins. */
|
||||||
|
hr { margin: -8px auto 11px; }
|
|
@ -0,0 +1,85 @@
|
||||||
|
/* --------------------------------------------------------------
|
||||||
|
|
||||||
|
print.css
|
||||||
|
* Gives you some sensible styles for printing pages.
|
||||||
|
* See Readme file in this directory for further instructions.
|
||||||
|
|
||||||
|
Some additions you'll want to make, customized to your markup:
|
||||||
|
#header, #footer, #navigation { display:none; }
|
||||||
|
|
||||||
|
-------------------------------------------------------------- */
|
||||||
|
|
||||||
|
body {
|
||||||
|
line-height: 1.5;
|
||||||
|
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
color:#000;
|
||||||
|
background: none;
|
||||||
|
font-size: 10pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Layout
|
||||||
|
-------------------------------------------------------------- */
|
||||||
|
|
||||||
|
.container {
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
background:#ccc;
|
||||||
|
color:#ccc;
|
||||||
|
width:100%;
|
||||||
|
height:2px;
|
||||||
|
margin:2em 0;
|
||||||
|
padding:0;
|
||||||
|
border:none;
|
||||||
|
}
|
||||||
|
hr.space {
|
||||||
|
background: #fff;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Text
|
||||||
|
-------------------------------------------------------------- */
|
||||||
|
|
||||||
|
h1,h2,h3,h4,h5,h6 { font-family: "Helvetica Neue", Arial, "Lucida Grande", sans-serif; }
|
||||||
|
code { font:.9em "Courier New", Monaco, Courier, monospace; }
|
||||||
|
|
||||||
|
img { float:left; margin:1.5em 1.5em 1.5em 0; }
|
||||||
|
a img { border:none; }
|
||||||
|
p img.top { margin-top: 0; }
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
margin:1.5em;
|
||||||
|
padding:1em;
|
||||||
|
font-style:italic;
|
||||||
|
font-size:.9em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.small { font-size: .9em; }
|
||||||
|
.large { font-size: 1.1em; }
|
||||||
|
.quiet { color: #999; }
|
||||||
|
.hide { display:none; }
|
||||||
|
|
||||||
|
|
||||||
|
/* Links
|
||||||
|
-------------------------------------------------------------- */
|
||||||
|
|
||||||
|
a:link, a:visited {
|
||||||
|
background: transparent;
|
||||||
|
font-weight:700;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:link:after, a:visited:after {
|
||||||
|
content: " (" attr(href) ") ";
|
||||||
|
font-size: 90%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If you're having trouble printing relative links, uncomment and customize this:
|
||||||
|
(note: This is valid CSS3, but it still won't go through the W3C CSS Validator) */
|
||||||
|
|
||||||
|
/* a[href^="/"]:after {
|
||||||
|
content: " (http://www.yourdomain.com" attr(href) ") ";
|
||||||
|
} */
|
|
@ -0,0 +1,38 @@
|
||||||
|
/* --------------------------------------------------------------
|
||||||
|
|
||||||
|
reset.css
|
||||||
|
* Resets default browser CSS.
|
||||||
|
|
||||||
|
-------------------------------------------------------------- */
|
||||||
|
|
||||||
|
html, body, div, span, object, iframe,
|
||||||
|
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||||
|
a, abbr, acronym, address, code,
|
||||||
|
del, dfn, em, img, q, dl, dt, dd, ol, ul, li,
|
||||||
|
fieldset, form, label, legend,
|
||||||
|
table, caption, tbody, tfoot, thead, tr, th, td {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
border: 0;
|
||||||
|
font-weight: inherit;
|
||||||
|
font-style: inherit;
|
||||||
|
font-size: 100%;
|
||||||
|
font-family: inherit;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tables still need 'cellspacing="0"' in the markup. */
|
||||||
|
table { border-collapse: separate; border-spacing: 0; }
|
||||||
|
caption, th, td { text-align: left; font-weight: normal; }
|
||||||
|
table, td, th { vertical-align: middle; }
|
||||||
|
|
||||||
|
/* Remove possible quote marks (") from <q>, <blockquote>. */
|
||||||
|
blockquote:before, blockquote:after, q:before, q:after { content: ""; }
|
||||||
|
blockquote, q { quotes: "" ""; }
|
||||||
|
|
||||||
|
/* Remove annoying border on linked images. */
|
||||||
|
a img { border: none; }
|
|
@ -0,0 +1,104 @@
|
||||||
|
/* --------------------------------------------------------------
|
||||||
|
|
||||||
|
typography.css
|
||||||
|
* Sets up some sensible default typography.
|
||||||
|
|
||||||
|
-------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* Default font settings.
|
||||||
|
The font-size percentage is of 16px. (0.75 * 16px = 12px) */
|
||||||
|
body {
|
||||||
|
font-size: 75%;
|
||||||
|
color: #222;
|
||||||
|
background: #fff;
|
||||||
|
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Headings
|
||||||
|
-------------------------------------------------------------- */
|
||||||
|
|
||||||
|
h1,h2,h3,h4,h5,h6 { font-weight: normal; color: #111; }
|
||||||
|
|
||||||
|
h1 { font-size: 3em; line-height: 1; margin-bottom: 0.5em; }
|
||||||
|
h2 { font-size: 2em; margin-bottom: 0.75em; }
|
||||||
|
h3 { font-size: 1.5em; line-height: 1; margin-bottom: 1em; }
|
||||||
|
h4 { font-size: 1.2em; line-height: 1.25; margin-bottom: 1.25em; height: 1.25em; }
|
||||||
|
h5 { font-size: 1em; font-weight: bold; margin-bottom: 1.5em; }
|
||||||
|
h6 { font-size: 1em; font-weight: bold; }
|
||||||
|
|
||||||
|
h1 img, h2 img, h3 img,
|
||||||
|
h4 img, h5 img, h6 img {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Text elements
|
||||||
|
-------------------------------------------------------------- */
|
||||||
|
|
||||||
|
p { margin: 0 0 1.5em; }
|
||||||
|
p img { float: left; margin: 1.5em 1.5em 1.5em 0; padding: 0; }
|
||||||
|
p img.right { float: right; margin: 1.5em 0 1.5em 1.5em; }
|
||||||
|
|
||||||
|
a:focus,
|
||||||
|
a:hover { color: #000; }
|
||||||
|
a { color: #009; text-decoration: underline; }
|
||||||
|
|
||||||
|
blockquote { margin: 1.5em; color: #666; font-style: italic; }
|
||||||
|
strong { font-weight: bold; }
|
||||||
|
em,dfn { font-style: italic; }
|
||||||
|
dfn { font-weight: bold; }
|
||||||
|
sup, sub { line-height: 0; }
|
||||||
|
|
||||||
|
abbr,
|
||||||
|
acronym { border-bottom: 1px dotted #666; }
|
||||||
|
address { margin: 0 0 1.5em; font-style: italic; }
|
||||||
|
del { color:#666; }
|
||||||
|
|
||||||
|
pre,code { margin: 1.5em 0; white-space: pre; }
|
||||||
|
pre,code,tt { font: 1em 'andale mono', 'lucida console', monospace; line-height: 1.5; }
|
||||||
|
|
||||||
|
|
||||||
|
/* Lists
|
||||||
|
-------------------------------------------------------------- */
|
||||||
|
|
||||||
|
li ul,
|
||||||
|
li ol { margin:0 1.5em; }
|
||||||
|
ul, ol { margin: 0 1.5em 1.5em 1.5em; }
|
||||||
|
|
||||||
|
ul { list-style-type: disc; }
|
||||||
|
ol { list-style-type: decimal; }
|
||||||
|
|
||||||
|
dl { margin: 0 0 1.5em 0; }
|
||||||
|
dl dt { font-weight: bold; }
|
||||||
|
dd { margin-left: 1.5em;}
|
||||||
|
|
||||||
|
|
||||||
|
/* Tables
|
||||||
|
-------------------------------------------------------------- */
|
||||||
|
|
||||||
|
table { margin-bottom: 1.4em; width:100%; }
|
||||||
|
th { font-weight: bold; background: #C3D9FF; }
|
||||||
|
th,td { padding: 4px 10px 4px 5px; }
|
||||||
|
tr.even td { background: #E5ECF9; }
|
||||||
|
tfoot { font-style: italic; }
|
||||||
|
caption { background: #eee; }
|
||||||
|
|
||||||
|
|
||||||
|
/* Misc classes
|
||||||
|
-------------------------------------------------------------- */
|
||||||
|
|
||||||
|
.small { font-size: .8em; margin-bottom: 1.875em; line-height: 1.875em; }
|
||||||
|
.large { font-size: 1.2em; line-height: 2.5em; margin-bottom: 1.25em; }
|
||||||
|
.hide { display: none; }
|
||||||
|
|
||||||
|
.quiet { color: #666; }
|
||||||
|
.loud { color: #000; }
|
||||||
|
.highlight { background:#ff0; }
|
||||||
|
.added { background:#060; color: #fff; }
|
||||||
|
.removed { background:#900; color: #fff; }
|
||||||
|
|
||||||
|
.first { margin-left:0; padding-left:0; }
|
||||||
|
.last { margin-right:0; padding-right:0; }
|
||||||
|
.top { margin-top:0; padding-top:0; }
|
||||||
|
.bottom { margin-bottom:0; padding-bottom:0; }
|
|
@ -0,0 +1,10 @@
|
||||||
|
#!/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
|
||||||
|
|
||||||
|
require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT)
|
||||||
|
|
||||||
|
# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like:
|
||||||
|
# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired
|
||||||
|
require "dispatcher"
|
||||||
|
|
||||||
|
ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
|
||||||
|
Dispatcher.dispatch
|
|
@ -0,0 +1,24 @@
|
||||||
|
#!/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
|
||||||
|
#
|
||||||
|
# You may specify the path to the FastCGI crash log (a log of unhandled
|
||||||
|
# exceptions which forced the FastCGI instance to exit, great for debugging)
|
||||||
|
# and the number of requests to process before running garbage collection.
|
||||||
|
#
|
||||||
|
# By default, the FastCGI crash log is RAILS_ROOT/log/fastcgi.crash.log
|
||||||
|
# and the GC period is nil (turned off). A reasonable number of requests
|
||||||
|
# could range from 10-100 depending on the memory footprint of your app.
|
||||||
|
#
|
||||||
|
# Example:
|
||||||
|
# # Default log path, normal GC behavior.
|
||||||
|
# RailsFCGIHandler.process!
|
||||||
|
#
|
||||||
|
# # Default log path, 50 requests between GC.
|
||||||
|
# RailsFCGIHandler.process! nil, 50
|
||||||
|
#
|
||||||
|
# # Custom log path, normal GC behavior.
|
||||||
|
# RailsFCGIHandler.process! '/var/log/myapp_fcgi_crash.log'
|
||||||
|
#
|
||||||
|
require File.dirname(__FILE__) + "/../config/environment"
|
||||||
|
require 'fcgi_handler'
|
||||||
|
|
||||||
|
RailsFCGIHandler.process!
|
|
@ -0,0 +1,10 @@
|
||||||
|
#!/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
|
||||||
|
|
||||||
|
require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT)
|
||||||
|
|
||||||
|
# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like:
|
||||||
|
# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired
|
||||||
|
require "dispatcher"
|
||||||
|
|
||||||
|
ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
|
||||||
|
Dispatcher.dispatch
|
После Ширина: | Высота: | Размер: 164 B |
|
@ -0,0 +1,542 @@
|
||||||
|
HTTP transfer protocols
|
||||||
|
=======================
|
||||||
|
|
||||||
|
Git supports two HTTP based transfer protocols. A "dumb" protocol
|
||||||
|
which requires only a standard HTTP server on the server end of the
|
||||||
|
connection, and a "smart" protocol which requires a Git aware CGI
|
||||||
|
(or server module). This document describes both protocols.
|
||||||
|
|
||||||
|
As a design feature smart clients can automatically upgrade "dumb"
|
||||||
|
protocol URLs to smart URLs. This permits all users to have the
|
||||||
|
same published URL, and the peers automatically select the most
|
||||||
|
efficient transport available to them.
|
||||||
|
|
||||||
|
|
||||||
|
URL Format
|
||||||
|
----------
|
||||||
|
|
||||||
|
URLs for Git repositories accessed by HTTP use the standard HTTP
|
||||||
|
URL syntax documented by RFC 1738, so they are of the form:
|
||||||
|
|
||||||
|
http://<host>:<port>/<path>
|
||||||
|
|
||||||
|
Within this documentation the placeholder $GIT_URL will stand for
|
||||||
|
the http:// repository URL entered by the end-user.
|
||||||
|
|
||||||
|
Both the "smart" and "dumb" HTTP protocols used by Git operate
|
||||||
|
by appending additional path components onto the end of the user
|
||||||
|
supplied $GIT_URL string.
|
||||||
|
|
||||||
|
Clients MUST strip a trailing '/', if present, from the user supplied
|
||||||
|
$GIT_URL string to prevent empty path tokens ('//') from appearing
|
||||||
|
in any URL sent to a server. Compatible clients must expand
|
||||||
|
'$GIT_URL/info/refs' as 'foo/info/refs' and not 'foo//info/refs'.
|
||||||
|
|
||||||
|
|
||||||
|
Authentication
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Standard HTTP authentication is used if authentication is required
|
||||||
|
to access a repository, and MAY be configured and enforced by the
|
||||||
|
HTTP server software.
|
||||||
|
|
||||||
|
Because Git repositories are accessed by standard path components
|
||||||
|
server administrators MAY use directory based permissions within
|
||||||
|
their HTTP server to control repository access.
|
||||||
|
|
||||||
|
Clients SHOULD support Basic authentication as described by RFC 2616.
|
||||||
|
Servers SHOULD support Basic authentication by relying upon the
|
||||||
|
HTTP server placed in front of the Git server software.
|
||||||
|
|
||||||
|
Servers MUST NOT require HTTP cookies for the purposes of
|
||||||
|
authentication or access control.
|
||||||
|
|
||||||
|
Clients and servers MAY support other common forms of HTTP based
|
||||||
|
authentication, such as Digest authentication.
|
||||||
|
|
||||||
|
|
||||||
|
SSL
|
||||||
|
---
|
||||||
|
|
||||||
|
Clients and servers SHOULD support SSL, particularly to protect
|
||||||
|
passwords when relying on Basic HTTP authentication.
|
||||||
|
|
||||||
|
|
||||||
|
Session State
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The Git over HTTP protocol (much like HTTP itself) is stateless
|
||||||
|
from the perspective of the HTTP server side. All state must be
|
||||||
|
retained and managed by the client process. This permits simple
|
||||||
|
round-robin load-balancing on the server side, without needing to
|
||||||
|
worry about state mangement.
|
||||||
|
|
||||||
|
Clients MUST NOT require state management on the server side in
|
||||||
|
order to function correctly.
|
||||||
|
|
||||||
|
Servers MUST NOT require HTTP cookies in order to function correctly.
|
||||||
|
Clients MAY store and forward HTTP cookies during request processing
|
||||||
|
as described by RFC 2616 (HTTP/1.1). Servers SHOULD ignore any
|
||||||
|
cookies sent by a client.
|
||||||
|
|
||||||
|
|
||||||
|
pkt-line Format
|
||||||
|
---------------
|
||||||
|
|
||||||
|
Much (but not all) of the payload is described around pkt-lines.
|
||||||
|
|
||||||
|
A pkt-line is a variable length binary string. The first four bytes
|
||||||
|
of the line indicates the total length of the line, in hexadecimal.
|
||||||
|
The total length includes the 4 bytes used to denote the length.
|
||||||
|
A line SHOULD BE terminated by an LF, which if present MUST be
|
||||||
|
included in the total length.
|
||||||
|
|
||||||
|
A pkt-line MAY contain binary data, so implementors MUST ensure all
|
||||||
|
pkt-line parsing/formatting routines are 8-bit clean. The maximum
|
||||||
|
length of a pkt-line's data is 65532 bytes (65536 - 4).
|
||||||
|
|
||||||
|
Examples (as C-style strings):
|
||||||
|
|
||||||
|
pkt-line actual value
|
||||||
|
---------------------------------
|
||||||
|
"0006a\n" "a\n"
|
||||||
|
"0005a" "a"
|
||||||
|
"000bfoobar\n" "foobar\n"
|
||||||
|
"0004" ""
|
||||||
|
|
||||||
|
A pkt-line with a length of 0 ("0000") is a special case and MUST
|
||||||
|
be treated as a message break or terminator in the payload.
|
||||||
|
|
||||||
|
|
||||||
|
General Request Processing
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
Except where noted, all standard HTTP behavior SHOULD be assumed
|
||||||
|
by both client and server. This includes (but is not necessarily
|
||||||
|
limited to):
|
||||||
|
|
||||||
|
If there is no repository at $GIT_URL, the server MUST respond with
|
||||||
|
the '404 Not Found' HTTP status code.
|
||||||
|
|
||||||
|
If there is a repository at $GIT_URL, but access is not currently
|
||||||
|
permitted, the server MUST respond with the '403 Forbidden' HTTP
|
||||||
|
status code.
|
||||||
|
|
||||||
|
Servers SHOULD support both HTTP 1.0 and HTTP 1.1.
|
||||||
|
Servers SHOULD support chunked encoding for both
|
||||||
|
request and response bodies.
|
||||||
|
|
||||||
|
Clients SHOULD support both HTTP 1.0 and HTTP 1.1.
|
||||||
|
Clients SHOULD support chunked encoding for both
|
||||||
|
request and response bodies.
|
||||||
|
|
||||||
|
Servers MAY return ETag and/or Last-Modified headers.
|
||||||
|
|
||||||
|
Clients MAY revalidate cached entities by including If-Modified-Since
|
||||||
|
and/or If-None-Match request headers.
|
||||||
|
|
||||||
|
Servers MAY return '304 Not Modified' if the relevant headers appear
|
||||||
|
in the request and the entity has not changed. Clients MUST treat
|
||||||
|
'304 Not Modified' identical to '200 OK' by reusing the cached entity.
|
||||||
|
|
||||||
|
Clients MAY reuse a cached entity without revalidation if the
|
||||||
|
Cache-Control and/or Expires header permits caching. Clients and
|
||||||
|
servers MUST follow RFC 2616 for cache controls.
|
||||||
|
|
||||||
|
|
||||||
|
Discovering References
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
All HTTP clients MUST begin either a fetch or a push exchange by
|
||||||
|
discovering the references available on the remote repository.
|
||||||
|
|
||||||
|
Dumb Clients
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
HTTP clients that only support the "dumb" protocol MUST discover
|
||||||
|
references by making a request for the special info/refs file of
|
||||||
|
the repository.
|
||||||
|
|
||||||
|
Dumb HTTP clients MUST NOT include search/query parameters when
|
||||||
|
fetching the info/refs file. (That is, '?' must not appear in the
|
||||||
|
requested URL.)
|
||||||
|
|
||||||
|
C: GET $GIT_URL/info/refs HTTP/1.0
|
||||||
|
|
||||||
|
S: 200 OK
|
||||||
|
S:
|
||||||
|
S: 95dcfa3633004da0049d3d0fa03f80589cbcaf31 refs/heads/maint
|
||||||
|
S: d049f6c27a2244e12041955e262a404c7faba355 refs/heads/master
|
||||||
|
S: 2cb58b79488a98d2721cea644875a8dd0026b115 refs/tags/v1.0
|
||||||
|
S: a3c2e2402b99163d1d59756e5f207ae21cccba4c refs/tags/v1.0^{}
|
||||||
|
|
||||||
|
The Content-Type of the returned info/refs entity SHOULD be
|
||||||
|
"text/plain; charset=utf-8", but MAY be any content type.
|
||||||
|
Clients MUST NOT attempt to validate the returned Content-Type.
|
||||||
|
Dumb servers MUST NOT return a return type starting with
|
||||||
|
"application/x-git-".
|
||||||
|
|
||||||
|
Cache-Control headers MAY be returned to disable caching of the
|
||||||
|
returned entity.
|
||||||
|
|
||||||
|
When examining the response clients SHOULD only examine the HTTP
|
||||||
|
status code. Valid responses are '200 OK', or '304 Not Modified'.
|
||||||
|
|
||||||
|
The returned content is a UNIX formatted text file describing
|
||||||
|
each ref and its known value. The file SHOULD be sorted by name
|
||||||
|
according to the C locale ordering. The file SHOULD NOT include
|
||||||
|
the default ref named 'HEAD'.
|
||||||
|
|
||||||
|
info_refs = *( ref_record )
|
||||||
|
ref_record = any_ref | peeled_ref
|
||||||
|
|
||||||
|
any_ref = id HT name LF
|
||||||
|
peeled_ref = id HT name LF
|
||||||
|
id HT name "^{}" LF
|
||||||
|
id = 40*HEX
|
||||||
|
|
||||||
|
HEX = "0".."9" | "a".."f"
|
||||||
|
LF = <US-ASCII LF, linefeed (10)>
|
||||||
|
HT = <US-ASCII HT, horizontal-tab (9)>
|
||||||
|
|
||||||
|
Smart Clients
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
HTTP clients that support the "smart" protocol (or both the
|
||||||
|
"smart" and "dumb" protocols) MUST discover references by making
|
||||||
|
a paramterized request for the info/refs file of the repository.
|
||||||
|
|
||||||
|
The request MUST contain exactly one query parameter,
|
||||||
|
'service=$servicename', where $servicename MUST be the service
|
||||||
|
name the client wishes to contact to complete the operation.
|
||||||
|
The request MUST NOT contain additional query parameters.
|
||||||
|
|
||||||
|
C: GET $GIT_URL/info/refs?service=git-upload-pack HTTP/1.0
|
||||||
|
|
||||||
|
dumb server reply:
|
||||||
|
S: 200 OK
|
||||||
|
S:
|
||||||
|
S: 95dcfa3633004da0049d3d0fa03f80589cbcaf31 refs/heads/maint
|
||||||
|
S: d049f6c27a2244e12041955e262a404c7faba355 refs/heads/master
|
||||||
|
S: 2cb58b79488a98d2721cea644875a8dd0026b115 refs/tags/v1.0
|
||||||
|
S: a3c2e2402b99163d1d59756e5f207ae21cccba4c refs/tags/v1.0^{}
|
||||||
|
|
||||||
|
smart server reply:
|
||||||
|
S: 200 OK
|
||||||
|
S: Content-Type: application/x-git-upload-pack-advertisement
|
||||||
|
S: Cache-Control: no-cache
|
||||||
|
S:
|
||||||
|
S: ....# service=git-upload-pack
|
||||||
|
S: ....95dcfa3633004da0049d3d0fa03f80589cbcaf31 refs/heads/maint\0 multi_ack
|
||||||
|
S: ....d049f6c27a2244e12041955e262a404c7faba355 refs/heads/master
|
||||||
|
S: ....2cb58b79488a98d2721cea644875a8dd0026b115 refs/tags/v1.0
|
||||||
|
S: ....a3c2e2402b99163d1d59756e5f207ae21cccba4c refs/tags/v1.0^{}
|
||||||
|
|
||||||
|
Dumb Server Response
|
||||||
|
^^^^^^^^^^^^^^^^^^^^
|
||||||
|
Dumb servers MUST respond with the dumb server reply format.
|
||||||
|
|
||||||
|
See the prior section under dumb clients for a more detailed
|
||||||
|
description of the dumb server response.
|
||||||
|
|
||||||
|
Smart Server Response
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
Smart servers MUST respond with the smart server reply format.
|
||||||
|
|
||||||
|
If the server does not recognize the requested service name, or the
|
||||||
|
requested service name has been disabled by the server administrator,
|
||||||
|
the server MUST respond with the '403 Forbidden' HTTP status code.
|
||||||
|
|
||||||
|
Cache-Control headers SHOULD be used to disable caching of the
|
||||||
|
returned entity.
|
||||||
|
|
||||||
|
The Content-Type MUST be 'application/x-$servicename-advertisement'.
|
||||||
|
Clients SHOULD fall back to the dumb protocol if another content
|
||||||
|
type is returned. When falling back to the dumb protocol clients
|
||||||
|
SHOULD NOT make an additional request to $GIT_URL/info/refs, but
|
||||||
|
instead SHOULD use the response already in hand. Clients MUST NOT
|
||||||
|
continue if they do not support the dumb protocol.
|
||||||
|
|
||||||
|
Clients MUST validate the status code is either '200 OK' or
|
||||||
|
'304 Not Modified'.
|
||||||
|
|
||||||
|
Clients MUST validate the first five bytes of the response entity
|
||||||
|
matches the regex "^[0-9a-f]{4}#". If this test fails, clients
|
||||||
|
MUST NOT continue.
|
||||||
|
|
||||||
|
Clients MUST parse the entire response as a sequence of pkt-line
|
||||||
|
records.
|
||||||
|
|
||||||
|
Clients MUST verify the first pkt-line is "# service=$servicename".
|
||||||
|
Servers MUST set $servicename to be the request parameter value.
|
||||||
|
Servers SHOULD include an LF at the end of this line.
|
||||||
|
Clients MUST ignore an LF at the end of the line.
|
||||||
|
|
||||||
|
Servers MUST terminate the response with the magic "0000" end
|
||||||
|
pkt-line marker.
|
||||||
|
|
||||||
|
The returned response is a pkt-line stream describing each ref and
|
||||||
|
its known value. The stream SHOULD be sorted by name according to
|
||||||
|
the C locale ordering. The stream SHOULD include the default ref
|
||||||
|
named 'HEAD' as the first ref. The stream MUST include capability
|
||||||
|
declarations behind a NUL on the first ref.
|
||||||
|
|
||||||
|
smart_reply = PKT-LINE("# service=$servicename" LF)
|
||||||
|
ref_list
|
||||||
|
"0000"
|
||||||
|
ref_list = empty_list | populated_list
|
||||||
|
|
||||||
|
empty_list = PKT-LINE(id SP "capabilities^{}" NUL cap_list LF)
|
||||||
|
|
||||||
|
non_empty_list = PKT-LINE(id SP name NUL cap_list LF)
|
||||||
|
*ref_record
|
||||||
|
|
||||||
|
cap_list = *(SP capability) SP
|
||||||
|
ref_record = any_ref | peeled_ref
|
||||||
|
|
||||||
|
any_ref = PKT-LINE(id SP name LF)
|
||||||
|
peeled_ref = PKT-LINE(id SP name LF)
|
||||||
|
PKT-LINE(id SP name "^{}" LF
|
||||||
|
id = 40*HEX
|
||||||
|
|
||||||
|
HEX = "0".."9" | "a".."f"
|
||||||
|
NL = <US-ASCII NUL, null (0)>
|
||||||
|
LF = <US-ASCII LF, linefeed (10)>
|
||||||
|
SP = <US-ASCII SP, horizontal-tab (9)>
|
||||||
|
|
||||||
|
|
||||||
|
Smart Service git-upload-pack
|
||||||
|
------------------------------
|
||||||
|
This service reads from the remote repository.
|
||||||
|
|
||||||
|
Clients MUST first perform ref discovery with
|
||||||
|
'$GIT_URL/info/refs?service=git-upload-pack'.
|
||||||
|
|
||||||
|
C: POST $GIT_URL/git-upload-pack HTTP/1.0
|
||||||
|
C: Content-Type: application/x-git-upload-pack-request
|
||||||
|
C:
|
||||||
|
C: ....want 0a53e9ddeaddad63ad106860237bbf53411d11a7
|
||||||
|
C: ....have 441b40d833fdfa93eb2908e52742248faf0ee993
|
||||||
|
C: 0000
|
||||||
|
|
||||||
|
S: 200 OK
|
||||||
|
S: Content-Type: application/x-git-upload-pack-result
|
||||||
|
S: Cache-Control: no-cache
|
||||||
|
S:
|
||||||
|
S: ....ACK %s, continue
|
||||||
|
S: ....NAK
|
||||||
|
|
||||||
|
Clients MUST NOT reuse or revalidate a cached reponse.
|
||||||
|
Servers MUST include sufficient Cache-Control headers
|
||||||
|
to prevent caching of the response.
|
||||||
|
|
||||||
|
Servers SHOULD support all capabilities defined here.
|
||||||
|
|
||||||
|
Clients MUST send at least one 'want' command in the request body.
|
||||||
|
Clients MUST NOT reference an id in a 'want' command which did not
|
||||||
|
appear in the response obtained through ref discovery.
|
||||||
|
|
||||||
|
compute_request = want_list
|
||||||
|
have_list
|
||||||
|
request_end
|
||||||
|
request_end = "0000" | "done"
|
||||||
|
|
||||||
|
want_list = PKT-LINE(want NUL cap_list LF)
|
||||||
|
*(want_pkt)
|
||||||
|
want_pkt = PKT-LINE(want LF)
|
||||||
|
want = "want" SP id
|
||||||
|
cap_list = *(SP capability) SP
|
||||||
|
|
||||||
|
have_list = *PKT-LINE("have" SP id LF)
|
||||||
|
|
||||||
|
command = create | delete | update
|
||||||
|
create = 40*"0" SP new_id SP name
|
||||||
|
delete = old_id SP 40*"0" SP name
|
||||||
|
update = old_id SP new_id SP name
|
||||||
|
|
||||||
|
TODO: Document this further.
|
||||||
|
TODO: Don't use uppercase for variable names below.
|
||||||
|
|
||||||
|
Capability include-tag
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
When packing an object that an annotated tag points at, include the
|
||||||
|
tag object too. Clients can request this if they want to fetch
|
||||||
|
tags, but don't know which tags they will need until after they
|
||||||
|
receive the branch data. By enabling include-tag an entire call
|
||||||
|
to upload-pack can be avoided.
|
||||||
|
|
||||||
|
Capability thin-pack
|
||||||
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
When packing a deltified object the base is not included if the base
|
||||||
|
is reachable from an object listed in the COMMON set by the client.
|
||||||
|
This reduces the bandwidth required to transfer, but it does slightly
|
||||||
|
increase processing time for the client to save the pack to disk.
|
||||||
|
|
||||||
|
The Negotiation Algorithm
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
The computation to select the minimal pack proceeds as follows
|
||||||
|
(c = client, s = server):
|
||||||
|
|
||||||
|
init step:
|
||||||
|
(c) Use ref discovery to obtain the advertised refs.
|
||||||
|
(c) Place any object seen into set ADVERTISED.
|
||||||
|
|
||||||
|
(c) Build an empty set, COMMON, to hold the objects that are later
|
||||||
|
determined to be on both ends.
|
||||||
|
(c) Build a set, WANT, of the objects from ADVERTISED the client
|
||||||
|
wants to fetch, based on what it saw during ref discovery.
|
||||||
|
|
||||||
|
(c) Start a queue, C_PENDING, ordered by commit time (popping newest
|
||||||
|
first). Add all client refs. When a commit is popped from
|
||||||
|
the queue its parents should be automatically inserted back.
|
||||||
|
Commits MUST only enter the queue once.
|
||||||
|
|
||||||
|
one compute step:
|
||||||
|
(c) Send one $GIT_URL/git-upload-pack request:
|
||||||
|
|
||||||
|
C: 0032want <WANT #1>...............................
|
||||||
|
C: 0032want <WANT #2>...............................
|
||||||
|
....
|
||||||
|
C: 0032have <COMMON #1>.............................
|
||||||
|
C: 0032have <COMMON #2>.............................
|
||||||
|
....
|
||||||
|
C: 0032have <HAVE #1>...............................
|
||||||
|
C: 0032have <HAVE #2>...............................
|
||||||
|
....
|
||||||
|
C: 0000
|
||||||
|
|
||||||
|
The stream is organized into "commands", with each command
|
||||||
|
appearing by itself in a pkt-line. Within a command line
|
||||||
|
the text leading up to the first space is the command name,
|
||||||
|
and the remainder of the line to the first LF is the value.
|
||||||
|
Command lines are terminated with an LF as the last byte of
|
||||||
|
the pkt-line value.
|
||||||
|
|
||||||
|
Commands MUST appear in the following order, if they appear
|
||||||
|
at all in the request stream:
|
||||||
|
|
||||||
|
* want
|
||||||
|
* have
|
||||||
|
|
||||||
|
The stream is terminated by a pkt-line flush ("0000").
|
||||||
|
|
||||||
|
A single "want" or "have" command MUST have one hex formatted
|
||||||
|
SHA-1 as its value. Multiple SHA-1s MUST be sent by sending
|
||||||
|
multiple commands.
|
||||||
|
|
||||||
|
The HAVE list is created by popping the first 32 commits
|
||||||
|
from C_PENDING. Less can be supplied if C_PENDING empties.
|
||||||
|
|
||||||
|
If the client has sent 256 HAVE commits and has not yet
|
||||||
|
received one of those back from S_COMMON, or the client has
|
||||||
|
emptied C_PENDING it should include a "done" command to let
|
||||||
|
the server know it won't proceed:
|
||||||
|
|
||||||
|
C: 0009done
|
||||||
|
|
||||||
|
(s) Parse the git-upload-pack request:
|
||||||
|
|
||||||
|
Verify all objects in WANT are directly reachable from refs.
|
||||||
|
|
||||||
|
The server MAY walk backwards through history or through
|
||||||
|
the reflog to permit slightly stale requests.
|
||||||
|
|
||||||
|
If no WANT objects are received, send an error:
|
||||||
|
|
||||||
|
TODO: Define error if no want lines are requested.
|
||||||
|
|
||||||
|
If any WANT object is not reachable, send an error:
|
||||||
|
|
||||||
|
TODO: Define error if an invalid want is requested.
|
||||||
|
|
||||||
|
Create an empty list, S_COMMON.
|
||||||
|
|
||||||
|
If 'have' was sent:
|
||||||
|
|
||||||
|
Loop through the objects in the order supplied by the client.
|
||||||
|
For each object, if the server has the object reachable from
|
||||||
|
a ref, add it to S_COMMON. If a commit is added to S_COMMON,
|
||||||
|
do not add any ancestors, even if they also appear in HAVE.
|
||||||
|
|
||||||
|
(s) Send the git-upload-pack response:
|
||||||
|
|
||||||
|
If the server has found a closed set of objects to pack or the
|
||||||
|
request ends with "done", it replies with the pack.
|
||||||
|
|
||||||
|
TODO: Document the pack based response
|
||||||
|
S: PACK...
|
||||||
|
|
||||||
|
The returned stream is the side-band-64k protocol supported
|
||||||
|
by the git-upload-pack service, and the pack is embedded into
|
||||||
|
stream 1. Progress messages from the server side may appear
|
||||||
|
in stream 2.
|
||||||
|
|
||||||
|
Here a "closed set of objects" is defined to have at least
|
||||||
|
one path from every WANT to at least one COMMON object.
|
||||||
|
|
||||||
|
If the server needs more information, it replies with a
|
||||||
|
status continue response:
|
||||||
|
|
||||||
|
TODO: Document the non-pack response
|
||||||
|
|
||||||
|
(c) Parse the upload-pack response:
|
||||||
|
|
||||||
|
TODO: Document parsing response
|
||||||
|
|
||||||
|
Do another compute step.
|
||||||
|
|
||||||
|
|
||||||
|
Smart Service git-receive-pack
|
||||||
|
------------------------------
|
||||||
|
This service modifies the remote repository.
|
||||||
|
|
||||||
|
Clients MUST first perform ref discovery with
|
||||||
|
'$GIT_URL/info/refs?service=git-receive-pack'.
|
||||||
|
|
||||||
|
C: POST $GIT_URL/git-receive-pack HTTP/1.0
|
||||||
|
C: Content-Type: application/x-git-receive-pack-request
|
||||||
|
C:
|
||||||
|
C: ....0a53e9ddeaddad63ad106860237bbf53411d11a7 441b40d833fdfa93eb2908e52742248faf0ee993 refs/heads/maint\0 report-status
|
||||||
|
C: 0000
|
||||||
|
C: PACK....
|
||||||
|
|
||||||
|
S: 200 OK
|
||||||
|
S: Content-Type: application/x-git-receive-pack-result
|
||||||
|
S: Cache-Control: no-cache
|
||||||
|
S:
|
||||||
|
S: ....
|
||||||
|
|
||||||
|
Clients MUST NOT reuse or revalidate a cached reponse.
|
||||||
|
Servers MUST include sufficient Cache-Control headers
|
||||||
|
to prevent caching of the response.
|
||||||
|
|
||||||
|
Servers SHOULD support all capabilities defined here.
|
||||||
|
|
||||||
|
Clients MUST send at least one command in the request body.
|
||||||
|
Within the command portion of the request body clients SHOULD send
|
||||||
|
the id obtained through ref discovery as old_id.
|
||||||
|
|
||||||
|
update_request = command_list
|
||||||
|
"PACK" <binary data>
|
||||||
|
|
||||||
|
command_list = PKT-LINE(command NUL cap_list LF)
|
||||||
|
*(command_pkt)
|
||||||
|
command_pkt = PKT-LINE(command LF)
|
||||||
|
cap_list = *(SP capability) SP
|
||||||
|
|
||||||
|
command = create | delete | update
|
||||||
|
create = 40*"0" SP new_id SP name
|
||||||
|
delete = old_id SP 40*"0" SP name
|
||||||
|
update = old_id SP new_id SP name
|
||||||
|
|
||||||
|
TODO: Document this further.
|
||||||
|
|
||||||
|
|
||||||
|
References
|
||||||
|
----------
|
||||||
|
|
||||||
|
link:http://www.ietf.org/rfc/rfc1738.txt[RFC 1738: Uniform Resource Locators (URL)]
|
||||||
|
link:http://www.ietf.org/rfc/rfc2616.txt[RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1]
|
||||||
|
|
После Ширина: | Высота: | Размер: 593 B |
После Ширина: | Высота: | Размер: 14 KiB |
После Ширина: | Высота: | Размер: 20 KiB |
После Ширина: | Высота: | Размер: 9.5 KiB |
После Ширина: | Высота: | Размер: 20 KiB |
После Ширина: | Высота: | Размер: 4.1 KiB |
После Ширина: | Высота: | Размер: 24 KiB |
После Ширина: | Высота: | Размер: 99 KiB |
После Ширина: | Высота: | Размер: 275 B |
После Ширина: | Высота: | Размер: 3.1 KiB |
После Ширина: | Высота: | Размер: 26 KiB |
После Ширина: | Высота: | Размер: 76 KiB |
После Ширина: | Высота: | Размер: 4.4 KiB |
После Ширина: | Высота: | Размер: 6.5 KiB |
После Ширина: | Высота: | Размер: 8.4 KiB |
После Ширина: | Высота: | Размер: 3.2 KiB |
После Ширина: | Высота: | Размер: 4.7 KiB |
После Ширина: | Высота: | Размер: 26 KiB |
После Ширина: | Высота: | Размер: 33 KiB |
После Ширина: | Высота: | Размер: 27 KiB |
После Ширина: | Высота: | Размер: 27 KiB |
После Ширина: | Высота: | Размер: 6.4 KiB |
После Ширина: | Высота: | Размер: 8.3 KiB |
|
@ -0,0 +1,2 @@
|
||||||
|
// Place your application-specific JavaScript functions and classes here
|
||||||
|
// This file is automatically included by javascript_include_tag :defaults
|
|
@ -0,0 +1,53 @@
|
||||||
|
/*
|
||||||
|
JQuery Curvy Corners by Mike Jolley -
|
||||||
|
http://blue-anvil.com
|
||||||
|
18th July 2008
|
||||||
|
v1.6 - B180708
|
||||||
|
*/
|
||||||
|
(function($){$.fn.corner=function(options){var settings={tl:{radius:8},tr:{radius:8},bl:{radius:8},br:{radius:8},antiAlias:true,autoPad:true,validTags:["div"]};if(options&&typeof(options)!='string')
|
||||||
|
$.extend(settings,options);return this.each(function(){new curvyObject(settings,this).applyCorners();});};function curvyObject(){this.box=arguments[1];this.settings=arguments[0];this.topContainer=null;this.bottomContainer=null;this.masterCorners=new Array();this.contentDIV=null;var boxPosition=$(this.box).css("position");var bgImage=$(this.box).css("backgroundImage");this.boxHeight=strip_px($(this.box).css("height"))?strip_px($(this.box).css("height")):this.box.scrollHeight;this.boxWidth=strip_px($(this.box).css("width"))?strip_px($(this.box).css("width")):this.box.scrollWidth;this.borderWidth=strip_px($(this.box).css("borderTopWidth"))?strip_px($(this.box).css("borderTopWidth")):0;this.boxPaddingTop=strip_px($(this.box).css("paddingTop"));this.boxPaddingBottom=strip_px($(this.box).css("paddingBottom"));this.boxPaddingLeft=strip_px($(this.box).css("paddingLeft"));this.boxPaddingRight=strip_px($(this.box).css("paddingRight"));this.boxColour=format_colour($(this.box).css("backgroundColor"));this.bgImage=(bgImage!="none"&&bgImage!="initial")?bgImage:"";this.boxContent=$(this.box).html();this.borderColour=format_colour($(this.box).css("borderTopColor"));this.borderString=this.borderWidth+"px"+" solid "+this.borderColour;$(this.box).css({"padding":"0px","borderColor":this.borderColour});if(boxPosition!="absolute")$(this.box).css("position","relative");if(($.browser.msie&&$.browser.version==6)&&this.boxWidth=="auto"&&this.boxHeight=="auto")$(this.box).css("width","100%");if(($.browser.msie)){$(this.box).css("zoom","1");$(this.box+" *").css("zoom","normal");}
|
||||||
|
if(this.settings.autoPad==true)
|
||||||
|
$(this.box).html("");this.applyCorners=function(){var topMaxRadius=Math.max(this.settings.tl?this.settings.tl.radius:0,this.settings.tr?this.settings.tr.radius:0);var botMaxRadius=Math.max(this.settings.bl?this.settings.bl.radius:0,this.settings.br?this.settings.br.radius:0);for(var t=0;t<2;t++){switch(t){case 0:if(this.settings.tl||this.settings.tr){var newMainContainer=document.createElement("div");this.topContainer=this.box.appendChild(newMainContainer);$(this.topContainer).css({width:"100%","font-size":"1px",overflow:"hidden",position:"absolute","padding-left":this.borderWidth,"padding-right":this.borderWidth,height:topMaxRadius+"px",top:0-topMaxRadius+"px",left:0-this.borderWidth+"px"});};break;case 1:if(this.settings.bl||this.settings.br){var newMainContainer=document.createElement("div");this.bottomContainer=this.box.appendChild(newMainContainer);$(this.bottomContainer).css({width:"100%","font-size":"1px",overflow:"hidden",position:"absolute","padding-left":this.borderWidth,"padding-right":this.borderWidth,height:botMaxRadius,bottom:0-botMaxRadius+"px",left:0-this.borderWidth+"px"});};break;};};if(this.settings.autoPad==true){var contentContainer=document.createElement("div");var contentContainer2=document.createElement("div");var clearDiv=document.createElement("div");$(contentContainer2).css({margin:"0","padding-bottom":this.boxPaddingBottom,"padding-top":this.boxPaddingTop,"padding-left":this.boxPaddingLeft,"padding-right":this.boxPaddingRight});$(contentContainer).css({position:"relative",float:"left",width:"100%","margin-top":"-"+(topMaxRadius-this.borderWidth)+"px","margin-bottom":"-"+(botMaxRadius-this.borderWidth)+"px"}).html(this.boxContent).addClass="autoPadDiv";$(clearDiv).css("clear","both");this.contentdiv=this.box.appendChild(contentContainer2);contentContainer2.appendChild(contentContainer);contentContainer2.appendChild(clearDiv);};if(this.topContainer)$(this.box).css("border-top",0);if(this.bottomContainer)$(this.box).css("border-bottom",0);var corners=["tr","tl","br","bl"];for(var i in corners){if(i>-1<4){var cc=corners[i];if(!this.settings[cc]){if(((cc=="tr"||cc=="tl")&&this.topContainer!=null)||((cc=="br"||cc=="bl")&&this.bottomContainer!=null)){var newCorner=document.createElement("div");$(newCorner).css({position:"relative","font-size":"1px",overflow:"hidden"});if(this.bgImage=="")
|
||||||
|
$(newCorner).css("background-color",this.boxColour);else
|
||||||
|
$(newCorner).css("background-image",this.bgImage).css("background-color",this.boxColour);;switch(cc)
|
||||||
|
{case"tl":$(newCorner).css({height:topMaxRadius-this.borderWidth,"margin-right":this.settings.tr.radius-(this.borderWidth*2),"border-left":this.borderString,"border-top":this.borderString,left:-this.borderWidth+"px","background-repeat":$(this.box).css("background-repeat"),"background-position":this.borderWidth+"px 0px"});break;case"tr":$(newCorner).css({height:topMaxRadius-this.borderWidth,"margin-left":this.settings.tl.radius-(this.borderWidth*2),"border-right":this.borderString,"border-top":this.borderString,left:this.borderWidth+"px","background-repeat":$(this.box).css("background-repeat"),"background-position":"-"+(topMaxRadius+this.borderWidth)+"px 0px"});break;case"bl":if(topMaxRadius>0)
|
||||||
|
$(newCorner).css({height:botMaxRadius-this.borderWidth,"margin-right":this.settings.br.radius-(this.borderWidth*2),"border-left":this.borderString,"border-bottom":this.borderString,left:-this.borderWidth+"px","background-repeat":$(this.box).css("background-repeat"),"background-position":"0px -"+($(this.box).height()+topMaxRadius-this.borderWidth+1)+"px"});else
|
||||||
|
$(newCorner).css({height:botMaxRadius-this.borderWidth,"margin-right":this.settings.br.radius-(this.borderWidth*2),"border-left":this.borderString,"border-bottom":this.borderString,left:-this.borderWidth+"px","background-repeat":$(this.box).css("background-repeat"),"background-position":"0px -"+($(this.box).height())+"px"});break;case"br":if(topMaxRadius>0)
|
||||||
|
$(newCorner).css({height:botMaxRadius-this.borderWidth,"margin-left":this.settings.bl.radius-(this.borderWidth*2),"border-right":this.borderString,"border-bottom":this.borderString,left:this.borderWidth+"px","background-repeat":$(this.box).css("background-repeat"),"background-position":"-"+this.settings.bl.radius+this.borderWidth+"px -"+($(this.box).height()+topMaxRadius-this.borderWidth+1)+"px"});else
|
||||||
|
$(newCorner).css({height:botMaxRadius-this.borderWidth,"margin-left":this.settings.bl.radius-(this.borderWidth*2),"border-right":this.borderString,"border-bottom":this.borderString,left:this.borderWidth+"px","background-repeat":$(this.box).css("background-repeat"),"background-position":"-"+this.settings.bl.radius+this.borderWidth+"px -"+($(this.box).height())+"px"});break;};};}else{if(this.masterCorners[this.settings[cc].radius]){var newCorner=this.masterCorners[this.settings[cc].radius].cloneNode(true);}else{var newCorner=document.createElement("DIV");$(newCorner).css({height:this.settings[cc].radius,width:this.settings[cc].radius,position:"absolute","font-size":"1px",overflow:"hidden"});var borderRadius=parseInt(this.settings[cc].radius-this.borderWidth);for(var intx=0,j=this.settings[cc].radius;intx<j;intx++){if((intx+1)>=borderRadius)
|
||||||
|
var y1=-1;else
|
||||||
|
var y1=(Math.floor(Math.sqrt(Math.pow(borderRadius,2)-Math.pow((intx+1),2)))-1);if(borderRadius!=j){if((intx)>=borderRadius)
|
||||||
|
var y2=-1;else
|
||||||
|
var y2=Math.ceil(Math.sqrt(Math.pow(borderRadius,2)-Math.pow(intx,2)));if((intx+1)>=j)
|
||||||
|
var y3=-1;else
|
||||||
|
var y3=(Math.floor(Math.sqrt(Math.pow(j,2)-Math.pow((intx+1),2)))-1);};if((intx)>=j)
|
||||||
|
var y4=-1;else
|
||||||
|
var y4=Math.ceil(Math.sqrt(Math.pow(j,2)-Math.pow(intx,2)));if(y1>-1)this.drawPixel(intx,0,this.boxColour,100,(y1+1),newCorner,-1,this.settings[cc].radius);if(borderRadius!=j){for(var inty=(y1+1);inty<y2;inty++){if(this.settings.antiAlias){if(this.bgImage!=""){var borderFract=(pixelFraction(intx,inty,borderRadius)*100);if(borderFract<30){this.drawPixel(intx,inty,this.borderColour,100,1,newCorner,0,this.settings[cc].radius);}else{this.drawPixel(intx,inty,this.borderColour,100,1,newCorner,-1,this.settings[cc].radius);};}else{var pixelcolour=BlendColour(this.boxColour,this.borderColour,pixelFraction(intx,inty,borderRadius));this.drawPixel(intx,inty,pixelcolour,100,1,newCorner,0,this.settings[cc].radius,cc);};};};if(this.settings.antiAlias){if(y3>=y2)
|
||||||
|
{if(y2==-1)y2=0;this.drawPixel(intx,y2,this.borderColour,100,(y3-y2+1),newCorner,0,0);}}else{if(y3>=y1)
|
||||||
|
{this.drawPixel(intx,(y1+1),this.borderColour,100,(y3-y1),newCorner,0,0);}};var outsideColour=this.borderColour;}else{var outsideColour=this.boxColour;var y3=y1;};if(this.settings.antiAlias){for(var inty=(y3+1);inty<y4;inty++){this.drawPixel(intx,inty,outsideColour,(pixelFraction(intx,inty,j)*100),1,newCorner,((this.borderWidth>0)?0:-1),this.settings[cc].radius);};};};this.masterCorners[this.settings[cc].radius]=newCorner.cloneNode(true);};if(cc!="br"){for(var t=0,k=newCorner.childNodes.length;t<k;t++){var pixelBar=newCorner.childNodes[t];var pixelBarTop=strip_px($(pixelBar).css("top"));var pixelBarLeft=strip_px($(pixelBar).css("left"));var pixelBarHeight=strip_px($(pixelBar).css("height"));if(cc=="tl"||cc=="bl"){$(pixelBar).css("left",this.settings[cc].radius-pixelBarLeft-1+"px");};if(cc=="tr"||cc=="tl"){$(pixelBar).css("top",this.settings[cc].radius-pixelBarHeight-pixelBarTop+"px");};switch(cc){case"tr":$(pixelBar).css("background-position","-"+Math.abs((this.boxWidth-this.settings[cc].radius+this.borderWidth)+pixelBarLeft)+"px -"+Math.abs(this.settings[cc].radius-pixelBarHeight-pixelBarTop-this.borderWidth)+"px");break;case"tl":$(pixelBar).css("background-position","-"+Math.abs((this.settings[cc].radius-pixelBarLeft-1)-this.borderWidth)+"px -"+Math.abs(this.settings[cc].radius-pixelBarHeight-pixelBarTop-this.borderWidth)+"px");break;case"bl":if(topMaxRadius>0)
|
||||||
|
$(pixelBar).css("background-position","-"+Math.abs((this.settings[cc].radius-pixelBarLeft-1)-this.borderWidth)+"px -"+Math.abs(($(this.box).height()+topMaxRadius-this.borderWidth+1))+"px");else
|
||||||
|
$(pixelBar).css("background-position","-"+Math.abs((this.settings[cc].radius-pixelBarLeft-1)-this.borderWidth)+"px -"+Math.abs(($(this.box).height()))+"px");break;};};};};if(newCorner){switch(cc){case"tl":if($(newCorner).css("position")=="absolute")$(newCorner).css("top","0");if($(newCorner).css("position")=="absolute")$(newCorner).css("left","0");if(this.topContainer)this.topContainer.appendChild(newCorner);break;case"tr":if($(newCorner).css("position")=="absolute")$(newCorner).css("top","0");if($(newCorner).css("position")=="absolute")$(newCorner).css("right","0");if(this.topContainer)this.topContainer.appendChild(newCorner);break;case"bl":if($(newCorner).css("position")=="absolute")$(newCorner).css("bottom","0");if(newCorner.style.position=="absolute")$(newCorner).css("left","0");if(this.bottomContainer)this.bottomContainer.appendChild(newCorner);break;case"br":if($(newCorner).css("position")=="absolute")$(newCorner).css("bottom","0");if($(newCorner).css("position")=="absolute")$(newCorner).css("right","0");if(this.bottomContainer)this.bottomContainer.appendChild(newCorner);break;};};};};var radiusDiff=new Array();radiusDiff["t"]=Math.abs(this.settings.tl.radius-this.settings.tr.radius);radiusDiff["b"]=Math.abs(this.settings.bl.radius-this.settings.br.radius);for(z in radiusDiff){if(z=="t"||z=="b"){if(radiusDiff[z]){var smallerCornerType=((this.settings[z+"l"].radius<this.settings[z+"r"].radius)?z+"l":z+"r");var newFiller=document.createElement("div");$(newFiller).css({height:radiusDiff[z],width:this.settings[smallerCornerType].radius+"px",position:"absolute","font-size":"1px",overflow:"hidden","background-color":this.boxColour});switch(smallerCornerType)
|
||||||
|
{case"tl":$(newFiller).css({"bottom":"0","left":"0","border-left":this.borderString});this.topContainer.appendChild(newFiller);break;case"tr":$(newFiller).css({"bottom":"0","right":"0","border-right":this.borderString});this.topContainer.appendChild(newFiller);break;case"bl":$(newFiller).css({"top":"0","left":"0","border-left":this.borderString});this.bottomContainer.appendChild(newFiller);break;case"br":$(newFiller).css({"top":"0","right":"0","border-right":this.borderString});this.bottomContainer.appendChild(newFiller);break;}};var newFillerBar=document.createElement("div");$(newFillerBar).css({position:"relative","font-size":"1px",overflow:"hidden","background-color":this.boxColour,"background-image":this.bgImage,"background-repeat":$(this.box).css("background-repeat")});switch(z){case"t":if(this.topContainer){if(this.settings.tl.radius&&this.settings.tr.radius){$(newFillerBar).css({height:topMaxRadius-this.borderWidth+"px","margin-left":this.settings.tl.radius-this.borderWidth+"px","margin-right":this.settings.tr.radius-this.borderWidth+"px","border-top":this.borderString});if(this.bgImage!="")
|
||||||
|
$(newFillerBar).css("background-position","-"+(topMaxRadius+this.borderWidth)+"px 0px");this.topContainer.appendChild(newFillerBar);};$(this.box).css("background-position","0px -"+(topMaxRadius-this.borderWidth+1)+"px");};break;case"b":if(this.bottomContainer){if(this.settings.bl.radius&&this.settings.br.radius){$(newFillerBar).css({height:botMaxRadius-this.borderWidth+"px","margin-left":this.settings.bl.radius-this.borderWidth+"px","margin-right":this.settings.br.radius-this.borderWidth+"px","border-bottom":this.borderString});if(this.bgImage!=""&&topMaxRadius>0)
|
||||||
|
$(newFillerBar).css("background-position","-"+(this.settings.bl.radius-this.borderWidth)+"px -"+($(this.box).height()+topMaxRadius-this.borderWidth+1)+"px");else
|
||||||
|
$(newFillerBar).css("background-position","-"+(this.settings.bl.radius-this.borderWidth)+"px -"+($(this.box).height())+"px");this.bottomContainer.appendChild(newFillerBar);};};break;};};};};this.drawPixel=function(intx,inty,colour,transAmount,height,newCorner,image,cornerRadius){var pixel=document.createElement("div");$(pixel).css({height:height,width:"1px",position:"absolute","font-size":"1px",overflow:"hidden"});var topMaxRadius=Math.max(this.settings["tr"].radius,this.settings["tl"].radius);if(image==-1&&this.bgImage!=""){if(topMaxRadius>0)
|
||||||
|
$(pixel).css("background-position","-"+((this.boxWidth-cornerRadius-this.borderWidth)+intx)+"px -"+(($(this.box).height()+topMaxRadius-this.borderWidth)-inty)+"px");else
|
||||||
|
$(pixel).css("background-position","-"+((this.boxWidth-cornerRadius-this.borderWidth)+intx)+"px -"+(($(this.box).height())-inty)+"px");$(pixel).css({"background-image":this.bgImage,"background-repeat":$(this.box).css("background-repeat"),"background-color":colour});}
|
||||||
|
else
|
||||||
|
{$(pixel).css("background-color",colour);};if(transAmount!=100)
|
||||||
|
setOpacity(pixel,transAmount);$(pixel).css({top:inty+"px",left:intx+"px"});newCorner.appendChild(pixel);};};function BlendColour(Col1,Col2,Col1Fraction){var red1=parseInt(Col1.substr(1,2),16);var green1=parseInt(Col1.substr(3,2),16);var blue1=parseInt(Col1.substr(5,2),16);var red2=parseInt(Col2.substr(1,2),16);var green2=parseInt(Col2.substr(3,2),16);var blue2=parseInt(Col2.substr(5,2),16);if(Col1Fraction>1||Col1Fraction<0)Col1Fraction=1;var endRed=Math.round((red1*Col1Fraction)+(red2*(1-Col1Fraction)));if(endRed>255)endRed=255;if(endRed<0)endRed=0;var endGreen=Math.round((green1*Col1Fraction)+(green2*(1-Col1Fraction)));if(endGreen>255)endGreen=255;if(endGreen<0)endGreen=0;var endBlue=Math.round((blue1*Col1Fraction)+(blue2*(1-Col1Fraction)));if(endBlue>255)endBlue=255;if(endBlue<0)endBlue=0;return"#"+IntToHex(endRed)+IntToHex(endGreen)+IntToHex(endBlue);};function IntToHex(strNum){base=strNum/16;rem=strNum%16;base=base-(rem/16);baseS=MakeHex(base);remS=MakeHex(rem);return baseS+''+remS;};function MakeHex(x){if((x>=0)&&(x<=9)){return x;}else{switch(x){case 10:return"A";case 11:return"B";case 12:return"C";case 13:return"D";case 14:return"E";case 15:return"F";};};};function pixelFraction(x,y,r){var pixelfraction=0;var xvalues=new Array(1);var yvalues=new Array(1);var point=0;var whatsides="";var intersect=Math.sqrt((Math.pow(r,2)-Math.pow(x,2)));if((intersect>=y)&&(intersect<(y+1))){whatsides="Left";xvalues[point]=0;yvalues[point]=intersect-y;point=point+1;};var intersect=Math.sqrt((Math.pow(r,2)-Math.pow(y+1,2)));if((intersect>=x)&&(intersect<(x+1))){whatsides=whatsides+"Top";xvalues[point]=intersect-x;yvalues[point]=1;point=point+1;};var intersect=Math.sqrt((Math.pow(r,2)-Math.pow(x+1,2)));if((intersect>=y)&&(intersect<(y+1))){whatsides=whatsides+"Right";xvalues[point]=1;yvalues[point]=intersect-y;point=point+1;};var intersect=Math.sqrt((Math.pow(r,2)-Math.pow(y,2)));if((intersect>=x)&&(intersect<(x+1))){whatsides=whatsides+"Bottom";xvalues[point]=intersect-x;yvalues[point]=0;};switch(whatsides){case"LeftRight":pixelfraction=Math.min(yvalues[0],yvalues[1])+((Math.max(yvalues[0],yvalues[1])-Math.min(yvalues[0],yvalues[1]))/2);break;case"TopRight":pixelfraction=1-(((1-xvalues[0])*(1-yvalues[1]))/2);break;case"TopBottom":pixelfraction=Math.min(xvalues[0],xvalues[1])+((Math.max(xvalues[0],xvalues[1])-Math.min(xvalues[0],xvalues[1]))/2);break;case"LeftBottom":pixelfraction=(yvalues[0]*xvalues[1])/2;break;default:pixelfraction=1;};return pixelfraction;};function rgb2Hex(rgbColour){try{var rgbArray=rgb2Array(rgbColour);var red=parseInt(rgbArray[0]);var green=parseInt(rgbArray[1]);var blue=parseInt(rgbArray[2]);var hexColour="#"+IntToHex(red)+IntToHex(green)+IntToHex(blue);}catch(e){alert("There was an error converting the RGB value to Hexadecimal in function rgb2Hex");};return hexColour;};function rgb2Array(rgbColour){var rgbValues=rgbColour.substring(4,rgbColour.indexOf(")"));var rgbArray=rgbValues.split(", ");return rgbArray;};function setOpacity(obj,opacity){opacity=(opacity==100)?99.999:opacity;if($.browser.safari&&obj.tagName!="IFRAME")
|
||||||
|
{var rgbArray=rgb2Array(obj.style.backgroundColor);var red=parseInt(rgbArray[0]);var green=parseInt(rgbArray[1]);var blue=parseInt(rgbArray[2]);obj.style.backgroundColor="rgba("+red+", "+green+", "+blue+", "+opacity/100+")";}
|
||||||
|
else if(typeof(obj.style.opacity)!="undefined")
|
||||||
|
{obj.style.opacity=opacity/100;}
|
||||||
|
else if(typeof(obj.style.MozOpacity)!="undefined")
|
||||||
|
{obj.style.MozOpacity=opacity/100;}
|
||||||
|
else if(typeof(obj.style.filter)!="undefined")
|
||||||
|
{obj.style.filter="alpha(opacity:"+opacity+")";}
|
||||||
|
else if(typeof(obj.style.KHTMLOpacity)!="undefined")
|
||||||
|
{obj.style.KHTMLOpacity=opacity/100;}};function format_colour(colour){var returnColour="transparent";if(colour!=""&&colour!="transparent")
|
||||||
|
{if(colour.substr(0,3)=="rgb")
|
||||||
|
{returnColour=rgb2Hex(colour);}
|
||||||
|
else if(colour.length==4)
|
||||||
|
{returnColour="#"+colour.substring(1,2)+colour.substring(1,2)+colour.substring(2,3)+colour.substring(2,3)+colour.substring(3,4)+colour.substring(3,4);}
|
||||||
|
else
|
||||||
|
{returnColour=colour;};};return returnColour;};function strip_px(value){return parseInt(((value!="auto"&&value.indexOf("%")==-1&&value!=""&&value.indexOf("px")!==-1)?value.slice(0,value.indexOf("px")):0))}})(jQuery);
|
|
@ -0,0 +1,5 @@
|
||||||
|
# See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
|
||||||
|
#
|
||||||
|
# To ban all spiders from the entire site uncomment the next two lines:
|
||||||
|
# User-Agent: *
|
||||||
|
# Disallow: /
|
|
@ -0,0 +1,119 @@
|
||||||
|
/* COLOR SCHEME
|
||||||
|
base: #FFE9B7
|
||||||
|
darker: #E3D185
|
||||||
|
green: #9AB54F
|
||||||
|
red: #6E212E
|
||||||
|
lred: #B5463F
|
||||||
|
*/
|
||||||
|
|
||||||
|
body {
|
||||||
|
background:#fff;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
a { color: #6E212E; }
|
||||||
|
.center { text-align: center; }
|
||||||
|
.pad { padding: 5px; }
|
||||||
|
|
||||||
|
#toc { padding: 10px; font-size: 120%; }
|
||||||
|
#toc ul { display: inline; }
|
||||||
|
#toc ul li { display: inline; margin-left: 20px; margin-right: 20px;}
|
||||||
|
#toc ul li a { color: #240; }
|
||||||
|
|
||||||
|
ul.a-index li#m-index a, ul.a-about li#m-about a,
|
||||||
|
ul.a-documentation li#m-documentation a, ul.a-download li#m-download a,
|
||||||
|
ul.a-tools li#m-tools a { font-weight: bold; color: #fff; text-decoration: none;}
|
||||||
|
|
||||||
|
ul#about-list li { padding: 5px; }
|
||||||
|
ul#about-list li strong { color: #6E212E; }
|
||||||
|
|
||||||
|
.header h1 { text-align: center; }
|
||||||
|
.navbar { text-align: center; background: #9AB54F;}
|
||||||
|
.footer { text-align: center; background: #E3D185;}
|
||||||
|
.menu { padding: 10px; }
|
||||||
|
#header { min-height: 106px;}
|
||||||
|
|
||||||
|
h2.section-start { text-align:center; background: #9AB54F; color: #240; }
|
||||||
|
h3.title { background: #eee; padding: 5px;}
|
||||||
|
|
||||||
|
.inner { background: #FFE9B7; padding-bottom: 10px;}
|
||||||
|
.example { background: #eee; padding: 10px; }
|
||||||
|
img.book { border: 1px solid #666; }
|
||||||
|
|
||||||
|
#current-release #ver { font-size: 200%; color: #630; font-weight: bold; }
|
||||||
|
#current-release small { font-size: 80% !important; color: #888;}
|
||||||
|
#tip { text-align:center; padding: 20px 10px; font-size: 200%;}
|
||||||
|
|
||||||
|
#git-is { padding: 10px; margin-bottom: 15px; background: #FFE9B7;}
|
||||||
|
#git-is h3 { color: #630; font-size: 200%; font-weight: bold;}
|
||||||
|
|
||||||
|
#download-source { padding: 10px; padding-bottom:15px; background: #B5463F; }
|
||||||
|
#download-source h3 { color: #fff; font-weight: bold; text-align: center;}
|
||||||
|
#download-source h3 small { color: #eee; font-weight: normal; font-size: 70%;}
|
||||||
|
|
||||||
|
#using-git h3 { color: #6E212E; font-weight: bold;}
|
||||||
|
#using-git ul { font-size: 120%; color: #6E212E;}
|
||||||
|
|
||||||
|
#git-book { padding: 10px; text-align:center; color: #fff; font-size: 120%; background: #681;}
|
||||||
|
#git-book a { color: #E3D185; font-weight: bold; }
|
||||||
|
|
||||||
|
table tr td { vertical-align: top;}
|
||||||
|
|
||||||
|
table.data-table tr td { vertical-align: top;}
|
||||||
|
table.data-table tr td h3 { background: #B5463F; color: #fff; padding: 5px; }
|
||||||
|
|
||||||
|
table.data-table.hosting td { width:33%; }
|
||||||
|
table.data-table.software td { width:50%;}
|
||||||
|
|
||||||
|
table#authors tr td { font-size: 120%; }
|
||||||
|
|
||||||
|
table.bugmail td { border-bottom: 1px solid #f1f1f1; }
|
||||||
|
table.bugmail th { vertical-align: top; border-bottom: 1px solid #f1f1f1; }
|
||||||
|
|
||||||
|
#announce { text-align: center; padding: 5px; padding-bottom:15px; }
|
||||||
|
|
||||||
|
.doc-section { margin-top: 10px; }
|
||||||
|
.doc-section h2 { border-bottom: 1px solid #aaa; margin-bottom: 10px;
|
||||||
|
color: #141; background-color:#9AB54F; padding: 3px;}
|
||||||
|
.doc-section h3 { margin-bottom: 5px; margin-top: 8px; background: #eee; padding: 5px;}
|
||||||
|
|
||||||
|
.doc-toc { background: #eee; text-align: center; padding: 10px; margin-bottom: 10px; }
|
||||||
|
.doc-toc ul { margin: 0; display: inline; }
|
||||||
|
.doc-toc ul li { display: inline; padding: 0; margin: 0; margin-left: 5px; margin-right: 5px;}
|
||||||
|
.doc-toc ul li a { color: #240; }
|
||||||
|
|
||||||
|
table.ccmd td { border: 1px; padding-left: 2em; padding-right: 2em; }
|
||||||
|
table.ccmd { width: 99%; border: 1px solid #000; }
|
||||||
|
table.ccmd, code.g { font-family: monospace; }
|
||||||
|
table.ccmd td.g { width: 33%; }
|
||||||
|
table.ccmd td.g, code.g { font-weight: bold; }
|
||||||
|
table.ccmd td.g { background: #e9e8e1; color: #124; }
|
||||||
|
|
||||||
|
table.videos { width:100%;}
|
||||||
|
table.videos td { width:25%;}
|
||||||
|
|
||||||
|
.videos img { border: 1px solid #aaa; padding: 5px; background: #eee; }
|
||||||
|
|
||||||
|
#sfc-footer {
|
||||||
|
background: #9AB54F;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
#sfc-footer a {
|
||||||
|
color: #350;
|
||||||
|
}
|
||||||
|
.appeal {
|
||||||
|
border: 2px solid #350;
|
||||||
|
background: #eee;
|
||||||
|
color: #350;
|
||||||
|
font-size: 30px;
|
||||||
|
font-weight: bold;
|
||||||
|
max-height: 95px;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
.humourless {
|
||||||
|
font-size: 10px;
|
||||||
|
background: #eee;
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
.humourless a {
|
||||||
|
color: #555;
|
||||||
|
}
|
|
@ -0,0 +1,72 @@
|
||||||
|
|
||||||
|
<h2 id="about">About Git</h2>
|
||||||
|
|
||||||
|
<p>Git is distributed version control system focused on
|
||||||
|
speed, effectivity and real-world usability on large projects.
|
||||||
|
Its highlights include:</p>
|
||||||
|
|
||||||
|
<!-- Heavily inspired by Wikipedia -->
|
||||||
|
|
||||||
|
<ul id="about-list">
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<strong>Distributed development.</strong>
|
||||||
|
Like most other modern version control systems, Git gives each developer
|
||||||
|
a local copy of the entire development history,
|
||||||
|
and changes are copied from one such repository to another.
|
||||||
|
These changes are imported as additional development branches,
|
||||||
|
and can be merged in the same way as a locally developed branch.
|
||||||
|
Repositories can be easily accessed via the efficient Git protocol
|
||||||
|
(optionally wrapped in ssh for authentication and security)
|
||||||
|
or simply using HTTP - you can publish your repository anywhere
|
||||||
|
without <em>any</em> special webserver configuration required.
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<strong>Strong support for non-linear development.</strong>
|
||||||
|
Git supports rapid and convenient branching and merging,
|
||||||
|
and includes powerful tools for visualizing
|
||||||
|
and navigating a non-linear development history.
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<strong>Efficient handling of large projects.</strong>
|
||||||
|
Git is very fast and scales well
|
||||||
|
even when working with large projects and long histories.
|
||||||
|
It is commonly an order of magnitude faster
|
||||||
|
than most other version control systems,
|
||||||
|
and several orders of magnitude faster on some operations.
|
||||||
|
It also uses an extremely efficient packed format
|
||||||
|
for long-term revision storage
|
||||||
|
that currently tops any other open source version control system.
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<strong>Cryptographic authentication of history.</strong>
|
||||||
|
The Git history is stored in such a way
|
||||||
|
that the name of a particular revision (a "commit" in Git terms)
|
||||||
|
depends upon the complete development history leading up to that commit.
|
||||||
|
Once it is published, it is not possible to change the old versions
|
||||||
|
without it being noticed. Also, tags can be cryptographically signed.
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<strong>Toolkit design.</strong>
|
||||||
|
Following the Unix tradition,
|
||||||
|
Git is a collection of many small tools written in C,
|
||||||
|
and a number of scripts that provide convenient wrappers.
|
||||||
|
Git provides tools for both easy human usage and easy
|
||||||
|
scripting to perform new clever operations.
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>Besides providing a version control system,
|
||||||
|
the Git project provides a generic low-level toolkit
|
||||||
|
for tree history storage and directory content management.
|
||||||
|
Traditionally, the toolkit is called the <em>plumbing</em>.
|
||||||
|
Aside the user interface coming with Git itself,
|
||||||
|
several other projects (so-called <em>porcelains</em>)
|
||||||
|
offer compatible version control interfaces - see the
|
||||||
|
<a href="/tools">related tools</a> list.</p>
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
<div class="span-7">
|
||||||
|
<center>
|
||||||
|
<img src="/images/chaconbig.png"/>
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
<h3>Donate to Git Now!</h3>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
function validateAmount(amount){
|
||||||
|
if(amount.value.match( /^[0-9]+(\.([0-9]+))?$/)){
|
||||||
|
return true;
|
||||||
|
}else{
|
||||||
|
alert('You must enter a valid donation.');
|
||||||
|
amount.focus();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<form action="https://checkout.google.com/cws/v2/Donations/622836985124940/checkoutForm" id="BB_BuyButtonForm" method="post" name="BB_BuyButtonForm" onSubmit="return validateAmount(this.item_price_1)" target="_top">
|
||||||
|
<input name="item_name_1" type="hidden" value="Git Donation via Software Freedom Conservancy"/>
|
||||||
|
<input name="item_description_1" type="hidden" value="Donation to the Git Project via the Software Freedom Conservancy."/>
|
||||||
|
<input name="item_quantity_1" type="hidden" value="1"/>
|
||||||
|
<input name="item_currency_1" type="hidden" value="USD"/>
|
||||||
|
<input name="item_is_modifiable_1" type="hidden" value="true"/>
|
||||||
|
<input name="item_min_price_1" type="hidden" value="5.0"/>
|
||||||
|
<input name="item_max_price_1" type="hidden" value="25000.0"/>
|
||||||
|
<input name="_charset_" type="hidden" value="utf-8"/>
|
||||||
|
<table cellpadding="5" cellspacing="0" width="1%">
|
||||||
|
<tr>
|
||||||
|
<td align="right" nowrap="nowrap" width="1%">$ <input id="item_price_1" name="item_price_1" onfocus="this.style.color='black'; this.value='';" size="11" style="color:grey;" type="text" value="Enter Amount"/>
|
||||||
|
</td>
|
||||||
|
<td align="left" width="1%">
|
||||||
|
<input alt="Donate" src="https://checkout.google.com/buttons/donateNow.gif?merchant_id=622836985124940&w=115&h=50&style=white&variant=text&loc=en_US" type="image"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<p>A temple for the mind, people.</p>
|
||||||
|
</center>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="span-14 last">
|
||||||
|
<h3 class="title">From git-scm.com Maintainer Scott Chacon</h3>
|
||||||
|
<p>If everyone reading this donated a hundred and twelve dollars, our annual fundraiser would be over in just a few months.
|
||||||
|
Not everyone can or will donate. And that’s fine, because each year just enough people support git-scm.com with a small donation. If you feel it's your turn, and you know it is, please make a small donation of $112, $227, $305 or whatever you can to keep git-scm.com free.</p>
|
||||||
|
|
||||||
|
<p>Most people don't know this, but I'm a volunteer. A classy, classy volunteer.</p>
|
||||||
|
|
||||||
|
<p>I don't get paid a cent for my work at git-scm.com, and neither do the thousands of Git project developers. The hosting of this incredibly high-traffic site costs in the millions of dollars a year. Recently, I have been approached by Oracle to buy the site and all the IP associated with it. They've promised me that they'll hold it benevolently.</p>
|
||||||
|
|
||||||
|
<p>Commerce is fine. Oracle may or may not be evil. But it doesn't belong here. Not in git-scm.com.</p>
|
||||||
|
|
||||||
|
<p>git-scm.com is something special. It is like a library, a public park or an extremely high-end brothel. It is like a temple for the mind. <strong>A <em>temple for the mind</em>, people.</strong> It is a place we can all go to think, to learn, to share our distributed code with others. It is a unique human project, the first<em>-ish</em> of its kind in history. It is a humanitarian project to bring a free distributed source code version control system to every single person on the planet. Twice.</p>
|
||||||
|
|
||||||
|
<p>Every single person.</p>
|
||||||
|
|
||||||
|
<p>Twice.</p>
|
||||||
|
|
||||||
|
<p>We're a small organization, and I've worked hard over the years to keep us lean and tight. Especially in the abdominals.</p>
|
||||||
|
|
||||||
|
<p>To do this without resorting to advertising, we need you. It is you who keep this dream alive. It is you who have created git-scm.com. It is you who believe that a place of calm reflection, distributed source control and learning is worth having.</p>
|
||||||
|
|
||||||
|
<p>This year, please consider making a donation to protect and sustain git-scm.com and the Git project.</p>
|
||||||
|
|
||||||
|
<p>Thanks,<br/>
|
||||||
|
Scott "Dragon" Chacon<br/>
|
||||||
|
git-scm.com Maintainer</p>
|
||||||
|
|
||||||
|
<div class="humourless">
|
||||||
|
This page is <a href="http://wikimediafoundation.org/wiki/WMFJA032/en/US">a parody</a>. Donations made will actually go to the <a href="/sfc">Git project</a> under the <a href="http://sfconservancy.org/news/2010/dec/16/git-joins/">Software Freedom Conservancy</a>.
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1,86 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>Git - Fast Version Control System</title>
|
||||||
|
<meta name="description" content="Home of the Git Version Control System and Friends" />
|
||||||
|
<meta name="authors" content="Petr Baudis, Scott Chacon" />
|
||||||
|
<meta http-equiv="reply-to" content="schacon@gmail.com" />
|
||||||
|
<meta http-equiv="content-language" content="en" />
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||||
|
<link rel="icon" href="/favicon.png" type="image/png" />
|
||||||
|
<link rel="stylesheet" href="/blueprint/screen.css" type="text/css" media="screen, projection" />
|
||||||
|
<link rel="stylesheet" href="/blueprint/print.css" type="text/css" media="print" />
|
||||||
|
<!--[if IE]><link rel="stylesheet" href="blueprint/ie.css" type="text/css" media="screen, projection" /><![endif]-->
|
||||||
|
<link rel="stylesheet" href="/stylesheets/style.css" type="text/css" media="screen, projection" />
|
||||||
|
<script type="text/javascript" src="/javascripts/jquery-1.2.6.min.js"></script>
|
||||||
|
<script type="text/javascript" src="/javascripts/jquery.corner.js"></script>
|
||||||
|
|
||||||
|
<link rel="alternate" type="application/rss+xml" title="RSS"
|
||||||
|
href="http://feeds.feedburner.com/GitReleases">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="container showgrids">
|
||||||
|
|
||||||
|
<div class="span-21 navbar">
|
||||||
|
<form id="searchbox">
|
||||||
|
<div id="toc">
|
||||||
|
<ul class="a-<%= @action %>">
|
||||||
|
<li id="m-index"><a href="/">Home</a></li>
|
||||||
|
<li id="m-about"><a href="/about">About Git</a></li>
|
||||||
|
<li id="m-documentation"><a href="/documentation">Documentation</a></li>
|
||||||
|
<li id="m-download"><a href="/download">Download</a></li>
|
||||||
|
<li id="m-tools"><a href="/tools">Tools & Hosting</a></li>
|
||||||
|
<!-- <li id="m-wiki"><a href="http://git.wiki.kernel.org/index.php/Main_Page">Wiki</a></li> -->
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="span-21">
|
||||||
|
<br clear="both"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%= yield %>
|
||||||
|
|
||||||
|
<div class="span-21">
|
||||||
|
<br/><br/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="span-21 footer">
|
||||||
|
<div class="menu">
|
||||||
|
This page is maintained by Scott Chacon as part of the <a href="http://git-scm.com">Git homepage</a>.<br/>
|
||||||
|
Please email me at <a href="mailto:schacon@gmail.com">schacon@gmail.com</a>
|
||||||
|
with <a href="http://github.com/schacon/gitscm">patches</a>, suggestions and comments.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(function() {
|
||||||
|
$('.navbar').corner();
|
||||||
|
$('#searchbox').submit(function() {
|
||||||
|
term = $('#searchterm').val();
|
||||||
|
jQuery.facebox(function() {
|
||||||
|
jQuery.get('/page/searchbox?search=' + term, function(data) {
|
||||||
|
jQuery.facebox(data)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
|
||||||
|
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
var pageTracker = _gat._getTracker("UA-82337-12");
|
||||||
|
pageTracker._initData();
|
||||||
|
pageTracker._trackPageview();
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,13 @@
|
||||||
|
<h2>Development</h2>
|
||||||
|
|
||||||
|
<p>The user discussion and development of Git and most tools related to Git
|
||||||
|
takes place on the Git mailing list - everyone is welcome to post
|
||||||
|
bug reports, feature requests, comments and
|
||||||
|
<a href="http://repo.or.cz/w/git.git?a=blob_plain;f=Documentation/SubmittingPatches;hb=HEAD">patches</a>
|
||||||
|
to <a href="mailto:git@vger.kernel.org">git@vger.kernel.org</a>.
|
||||||
|
To <a href="mailto:majordomo@vger.kernel.org?body=subscribe%20git">subscribe</a>
|
||||||
|
to the list, send an email with just "subscribe git" in the body to
|
||||||
|
majordomo@vger.kernel.org.
|
||||||
|
The mailing list archives are available at
|
||||||
|
<a href="http://dir.gmane.org/gmane.comp.version-control.git">Gmane</a>
|
||||||
|
and <a href="http://marc.info/?l=git">MARC</a>.</p>
|
|
@ -0,0 +1,188 @@
|
||||||
|
<div class="span-21">
|
||||||
|
<div id="git-book">
|
||||||
|
<img src="images/book.png" alt="" />
|
||||||
|
<a href="http://progit.org/book">Pro Git Book</a> :
|
||||||
|
The Creative Commons licensed freely available online book
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="span-21">
|
||||||
|
<br/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="span-11">
|
||||||
|
<h2 class="section-start" id="tutorials">Tutorials</h2>
|
||||||
|
|
||||||
|
<h3 class="title">Short and Sweet</h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The <a href="http://gitref.org">Git Reference site</a> is a online git reference built as a tutorial.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>The <a href="http://schacon.github.com/git/gittutorial.html"><strong>official Git tutorial</strong></a>
|
||||||
|
is a good place to get started.</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a href="http://schacon.github.com/git/everyday.html">Everyday Git</a> in 20 commands is good
|
||||||
|
for a useful minimum set of commands.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>The <a href="/course/svn.html">SVN Crash Course</a> might be helpful if you're
|
||||||
|
coming from the SVN world.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h3 class="title">Longer, More In Depth</h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a href="http://hoth.entp.com/output/git_for_designers.html">
|
||||||
|
Git for Designers</a> – No knowledge of version control? No problem.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a href="http://eagain.net/articles/git-for-computer-scientists/">
|
||||||
|
Git for Computer Scientists</a> – A quick introduction
|
||||||
|
to git internals for people who are not scared by words like Directed Acyclic Graph.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>The <a href="http://schacon.github.com/git/user-manual.html"><strong>Git User's Manual</strong></a>
|
||||||
|
is a comprehensive resource, covering a lot of Git functionality.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a href="http://www-cs-students.stanford.edu/~blynn/gitmagic/">Git Magic</a>
|
||||||
|
– An alternative online book with the source <a href="http://github.com/blynn/gitmagic/tree/master">online</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a href="http://help.github.com">Help.GitHub</a>
|
||||||
|
– Guides on a variety of Git and GitHub related topics
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2 class="section-start" id="reference">Reference</h2>
|
||||||
|
<p>
|
||||||
|
The official and comprehensive
|
||||||
|
<a href="http://schacon.github.com/git/git.html">reference manual</a>
|
||||||
|
comes as part of the Git package itself
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The <a href="http://refcardz.dzone.com/refcardz/getting-started-git">DZone RefCard</a> is a nice reference to keep handy
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p><a href="http://zrusin.blogspot.com/2007/09/git-cheat-sheet.html">
|
||||||
|
Visual Git Cheat Sheet</a> is a one page printable cheat sheet
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="span-10 last">
|
||||||
|
<h2 class="section-start" id="books">Books</h2>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr><td>
|
||||||
|
|
||||||
|
<div class="center">
|
||||||
|
<a href="http://peepcode.com/products/git-internals-pdf"><img class="book" width="120" src="/images/books/gitbook-cover.png" alt="" /></a><br/>
|
||||||
|
<a href="http://peepcode.com/products/git-internals-pdf">Git Internals PDF</a><br/>
|
||||||
|
by Scott Chacon
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</td><td>
|
||||||
|
|
||||||
|
<div class="center">
|
||||||
|
<a href="http://www.amazon.com/gp/product/1934356158?ie=UTF8&tag=prgi-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=1934356158"><img class="book" width="120" src="/images/books/pvc_git.gif" alt="" /></a><img src="http://www.assoc-amazon.com/e/ir?t=prgi-20&l=as2&o=1&a=1934356158" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
|
||||||
|
<br/>
|
||||||
|
<a href="http://www.pragprog.com/titles/tsgit/pragmatic-version-control-using-git">Pragmatic Version Control Using Git</a><br/>
|
||||||
|
by Travis Swicegood
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</td></tr>
|
||||||
|
|
||||||
|
<tr><td>
|
||||||
|
|
||||||
|
<div class="center">
|
||||||
|
<a href="http://www.amazon.com/gp/product/0596520123?ie=UTF8&tag=prgi-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=0596520123"><img class="book" width="120" src="/images/books/vcw_git.jpg" alt="" /></a><img src="http://www.assoc-amazon.com/e/ir?t=prgi-20&l=as2&o=1&a=0596520123" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
|
||||||
|
<br/>
|
||||||
|
<a href="http://www.amazon.com/Version-Control-Git-collaborative-development/dp/0596520123">Version Control with Git</a><br/>
|
||||||
|
by Jon Loeliger
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</td><td>
|
||||||
|
|
||||||
|
<div class="center">
|
||||||
|
<a href="http://progit.org"><img class="book" width="120" src="/images/books/progit.jpg" alt="" /></a><br/>
|
||||||
|
<a href="http://progit.org">Pro Git</a><br/>
|
||||||
|
by Scott Chacon<br/>
|
||||||
|
<strong>Creative Commons Licensed</strong>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</td></tr>
|
||||||
|
|
||||||
|
<tr><td>
|
||||||
|
|
||||||
|
<div class="center">
|
||||||
|
<a href="http://www.amazon.com/gp/product/1934356727?ie=UTF8&tag=prgi-20&linkCode=as2&camp=1789&creative=390957&creativeASIN=1934356727"><img class="book" width="120" src="/images/books/pg_git.jpg"></a><img src="http://www.assoc-amazon.com/e/ir?t=prgi-20&l=as2&o=1&a=1934356727" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
|
||||||
|
<br/>
|
||||||
|
<a href="http://www.pragprog.com/titles/pg_git/pragmatic-guide-to-git">Pragmatic Guide to Git</a><br/>
|
||||||
|
by Travis Swicegood
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</td></tr>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="span-21 videos">
|
||||||
|
<h2 class="section-start" id="videos">Videos</h2>
|
||||||
|
|
||||||
|
<table width="100%" class="videos">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<a href="http://www.youtube.com/watch?v=4XpnKHJAok8">
|
||||||
|
<img width="160px" src="/images/videos/vid-linus.jpg" alt="" /></a><br/>
|
||||||
|
Linus Torvalds visits Google to share his thoughts on git,
|
||||||
|
the source control management system he created two years ago.
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a href="http://www.youtube.com/watch?v=8dhZ9BXQgc4">
|
||||||
|
<img width="160px" src="/images/videos/git-rs.jpg" alt="" /></a><br/>
|
||||||
|
A one-hour talk by Randal Schwartz describing what Git is, and
|
||||||
|
why it should be used over other revision control systems.
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a href="http://excess.org/article/2008/07/ogre-git-tutorial/">
|
||||||
|
<img width="160px" src="/images/videos/vid-ogre.jpg" alt="" /></a><br/>
|
||||||
|
<a href="http://excess.org/article/2008/07/ogre-git-tutorial/">
|
||||||
|
<strong>Git Tutorial Talk</strong></a> –
|
||||||
|
A recording of an excellent Git tutorial given by Bart Trojanowski for
|
||||||
|
the Ottawa Group of Ruby Enthusiasts.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
<p>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(function() {
|
||||||
|
$('#git-book').corner();
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -0,0 +1,95 @@
|
||||||
|
<div class="span-14">
|
||||||
|
<h2 id="download">Download</h2>
|
||||||
|
|
||||||
|
<h2 class="section-start">Binaries</h2>
|
||||||
|
|
||||||
|
<p>For people who prefer precompiled packages, these are available:</p>
|
||||||
|
|
||||||
|
<table class="bugmail">
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<th>RPMs</th>
|
||||||
|
<td></td>
|
||||||
|
<td><a href="http://kernel.org/pub/software/scm/git/RPMS/">http://kernel.org/pub/software/scm/git/RPMS/</a></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr class="odd">
|
||||||
|
<th rowspan="3">Debs</th>
|
||||||
|
<td>Stable</td>
|
||||||
|
<td><a href="http://packages.debian.org/stable/git">http://packages.debian.org/stable/devel/git</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>Testing</td>
|
||||||
|
<td><a href="http://packages.debian.org/testing/devel/git">http://packages.debian.org/testing/devel/git</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="odd">
|
||||||
|
<td>Unstable</td>
|
||||||
|
<td><a href="http://packages.debian.org/unstable/devel/git">http://packages.debian.org/unstable/devel/git</a></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<th rowspan="2">Win</th>
|
||||||
|
<td><a href="http://www.cygwin.com/">Cygwin</a></td>
|
||||||
|
<td><a href="http://www.cygwin.com/setup.exe">http://www.cygwin.com/setup.exe</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="odd">
|
||||||
|
<td><a href="http://code.google.com/p/msysgit/">msysGit</a></td>
|
||||||
|
<td><a href="http://code.google.com/p/msysgit/downloads/list">http://code.google.com/p/msysgit/downloads/list</a></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr class="odd">
|
||||||
|
<th>OS X</th>
|
||||||
|
<td>Stable</td>
|
||||||
|
<td><a href="http://code.google.com/p/git-osx-installer/downloads/list?can=3">http://code.google.com/p/git-osx-installer/downloads/list?can=3</a></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<th rowspan="2">Solaris</th>
|
||||||
|
<td>v8–10</td>
|
||||||
|
<td><a href="http://sunfreeware.com/">http://sunfreeware.com/</a></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="odd">
|
||||||
|
<td><a href="http://opencsw.org/">v9–10</a></td>
|
||||||
|
<td><a href="http://opencsw.org/packages/git/">http://opencsw.org/packages/git/</a></td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="span-7 last">
|
||||||
|
<%= erb :download_box %>
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<div class="center">
|
||||||
|
<h3 class="title">Development snapshots</h3>
|
||||||
|
|
||||||
|
<p>Daily snapshots of the main Git development branch are available at
|
||||||
|
<a href="http://www.codemonkey.org.uk/projects/git-snapshots/git/">codemonkey.org</a><br/>
|
||||||
|
(thanks to Dave Jones).</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="span-21">
|
||||||
|
|
||||||
|
<h2 class="section-start">Git via Git</h2>
|
||||||
|
|
||||||
|
<p>If you already have Git installed, you can get the latest
|
||||||
|
development version via Git itself:</p>
|
||||||
|
<pre><strong>git clone git://github.com/gitster/git.git</strong></pre>
|
||||||
|
|
||||||
|
<p>If you have problems connecting (Git uses port 9418),
|
||||||
|
you can try to access the repository over the HTTP protocol:</p>
|
||||||
|
<pre><strong>git clone http://github.com/gitster/git.git</strong></pre>
|
||||||
|
<p>(this method works even behind firewalls and such).</p>
|
||||||
|
|
||||||
|
<p>You can also always browse the current contents
|
||||||
|
of the git repository using either
|
||||||
|
the <a href="http://repo.or.cz/w/git.git">gitweb</a>
|
||||||
|
or <a href="http://github.com/gister/git/tree/master">GitHub</a>
|
||||||
|
web interface.</p>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
|
@ -0,0 +1,42 @@
|
||||||
|
<div id="download-source">
|
||||||
|
<h3>Download Git</h3>
|
||||||
|
<div class="inner">
|
||||||
|
<div class="center pad">
|
||||||
|
The latest stable Git release is
|
||||||
|
<div id="current-release">
|
||||||
|
<div id="ver">v<%= @version %></div>
|
||||||
|
</div>
|
||||||
|
<a href="http://www.kernel.org/pub/software/scm/git/docs/RelNotes/<%= @version %>.txt">release notes</a>
|
||||||
|
<small>(<%= @date %>)</small>
|
||||||
|
</div>
|
||||||
|
<table><tr><td style="width:33%">
|
||||||
|
<div class="center"><a href="http://code.google.com/p/msysgit/downloads/list?can=3"><img src="images/windows_big.png" alt="Windows" /></a></div>
|
||||||
|
</td><td style="width:33%">
|
||||||
|
<div class="center"><a href="http://code.google.com/p/git-osx-installer/downloads/list?can=3"><img src="images/osx_big.png" alt="Mac OSX" /></a></div>
|
||||||
|
</td><td style="width:33%">
|
||||||
|
<div class="center"><a href="http://kernel.org/pub/software/scm/git/git-<%= @version %>.tar.bz2"><img src="images/tux_big.png" alt="Source" /></a></div>
|
||||||
|
</td></tr>
|
||||||
|
<tr><td>
|
||||||
|
<div class="center"><a href="http://code.google.com/p/msysgit/downloads/list?can=3">Windows</a></div>
|
||||||
|
</td><td>
|
||||||
|
<div class="center"><a href="http://code.google.com/p/git-osx-installer/downloads/list?can=3">Mac OSX</a></div>
|
||||||
|
</td><td>
|
||||||
|
<div class="center"><a href="http://kernel.org/pub/software/scm/git/git-<%= @version %>.tar.bz2">Source</a></div>
|
||||||
|
</td></tr></table>
|
||||||
|
<div class="center">
|
||||||
|
<% if @download %>
|
||||||
|
<a href="/download">Other Download Options</a><br/>
|
||||||
|
<% else %>
|
||||||
|
<a href="http://www.kernel.org/pub/software/scm/git/">Older Releases</a><br/>
|
||||||
|
<% end %>
|
||||||
|
<a href="http://git.kernel.org/?p=git/git.git;a=summary">Git Source Repository</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(function() {
|
||||||
|
$('#download-source').corner();
|
||||||
|
$('.inner').corner();
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -0,0 +1,18 @@
|
||||||
|
xml.instruct! :xml, :version=>"1.0"
|
||||||
|
xml.rss(:version=>"2.0"){
|
||||||
|
xml.channel{
|
||||||
|
xml.title("Git Releases")
|
||||||
|
xml.link("http://git-scm.com/")
|
||||||
|
xml.description("Git Release Announcements")
|
||||||
|
xml.language('en-us')
|
||||||
|
@releases.each do |release|
|
||||||
|
xml.item do
|
||||||
|
xml.title(release[1])
|
||||||
|
xml.description(release[2])
|
||||||
|
xml.pubDate(release[0].strftime("%a, %d %b %Y %H:%M:%S %z"))
|
||||||
|
xml.link('http://git-scm.com/download')
|
||||||
|
xml.guid(release[1], "isPermaLink"=>"false")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
<div class="doc-section">
|
||||||
|
|
||||||
|
<h1>Git in 5 Minutes</h1>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
* getting git and first time setup
|
||||||
|
* cloning a repository
|
||||||
|
* making changes and committing
|
||||||
|
* creating a patch for email
|
||||||
|
* creating a new repo on github, pushing your fork there
|
||||||
|
-->
|
||||||
|
|
||||||
|
<p></p>
|
||||||
|
|
||||||
|
</div>
|
|
@ -0,0 +1,131 @@
|
||||||
|
<div span="span-21">
|
||||||
|
<div id="announce">
|
||||||
|
<strong>The <a href="https://www.survs.com/survey/VCAGZA8CT5">Git User's Survey 2011</a> is up!</strong>
|
||||||
|
|
||||||
|
Please devote a few minutes of your time to fill it out, so we can improve Git!
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="span-9">
|
||||||
|
<div id="git-is">
|
||||||
|
<h3>Git is...</h3>
|
||||||
|
|
||||||
|
<p>Git is a <strong>free & open source, distributed version control system</strong>
|
||||||
|
designed to handle everything from small to very large projects with
|
||||||
|
speed and efficiency.</p>
|
||||||
|
|
||||||
|
<p><strong>Every Git clone is a full-fledged repository</strong> with complete history
|
||||||
|
and full revision tracking capabilities, not dependent on network access
|
||||||
|
or a central server. <strong>Branching and merging are fast</strong> and easy to do.</p>
|
||||||
|
|
||||||
|
<p>Git is used for version control of files, much like tools such as
|
||||||
|
<a href="http://mercurial.selenic.com/">Mercurial</a>,
|
||||||
|
<a href="http://bazaar-vcs.org/">Bazaar</a>,
|
||||||
|
<a href="http://subversion.tigris.org/">Subversion</a>,
|
||||||
|
<a href="http://www.nongnu.org/cvs/">CVS</a>,
|
||||||
|
<a href="http://www.perforce.com/">Perforce</a>,
|
||||||
|
and <a href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/team-foundation-server">Team Foundation Server</a>.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="span-5">
|
||||||
|
<div id="using-git">
|
||||||
|
<h3>Projects using Git</h3>
|
||||||
|
<ul>
|
||||||
|
<li><a href="http://git.kernel.org/?p=git/git.git;a=summary">Git</a></li>
|
||||||
|
<li><a href="http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=summary">Linux Kernel</a></li>
|
||||||
|
<li><a href="http://perl5.git.perl.org/perl.git">Perl</a></li>
|
||||||
|
<li><a href="http://git.eclipse.org">Eclipse</a></li>
|
||||||
|
<li><a href="http://git.gnome.org/cgit/">Gnome</a></li>
|
||||||
|
<li><a href="http://gitweb.kde.org/">KDE</a></li>
|
||||||
|
<li><a href="http://qt.gitorious.org">Qt</a></li>
|
||||||
|
<li><a href="http://github.com/rails/rails/tree/master">Ruby on Rails</a></li>
|
||||||
|
<li><a href="http://android.git.kernel.org">Android</a></li>
|
||||||
|
<li><a href="http://git.postgresql.org/gitweb">PostgreSQL</a></li>
|
||||||
|
<li><a href="http://git.debian.org/">Debian</a></li>
|
||||||
|
<li><a href="http://www.x.org/wiki/Development/git">X.org</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="span-7 last">
|
||||||
|
<%= erb :download_box %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="span-21">
|
||||||
|
<h2 class="section-start">Git Quick Start</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="span-11">
|
||||||
|
<div class="example">
|
||||||
|
<h3>Cloning and Creating a Patch</h3>
|
||||||
|
|
||||||
|
<pre>$ git clone git://github.com/git/hello-world.git
|
||||||
|
$ cd hello-world
|
||||||
|
$ (edit files)
|
||||||
|
$ git add (files)
|
||||||
|
$ git commit -m 'Explain what I changed'
|
||||||
|
$ git format-patch origin/master
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="span-10 last">
|
||||||
|
<div class="example">
|
||||||
|
<h3>Creating and Commiting</h3>
|
||||||
|
|
||||||
|
<pre>$ cd (project-directory)
|
||||||
|
$ git init
|
||||||
|
$ (add some files)
|
||||||
|
$ git add .
|
||||||
|
$ git commit -m 'Initial commit'
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br style="clear:both;" />
|
||||||
|
<br style="clear:both;" />
|
||||||
|
|
||||||
|
<div class="span-21">
|
||||||
|
<h2 class="section-start">Got a Question?</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="span-7">
|
||||||
|
<h3 class="title">Chat</h3>
|
||||||
|
<p>If you are curious about something, feel free to ask
|
||||||
|
on the IRC channel dedicated to Git -
|
||||||
|
<a href="irc://irc.freenode.net/git">#git on freenode</a>.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="span-7">
|
||||||
|
<h3 class="title">FAQ</h3>
|
||||||
|
<p>
|
||||||
|
If you have a question that you think might be common, you can
|
||||||
|
quickly check the
|
||||||
|
<a href="http://git.wiki.kernel.org/index.php/GitFaq">Git FAQ</a> page.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="span-7 last">
|
||||||
|
<h3 class="title">Email</h3>
|
||||||
|
<p>You can also ask the Git community directly at our
|
||||||
|
<a href="http://dir.gmane.org/gmane.comp.version-control.git">git@vger.kernel.org mailing list</a>. Bug reports should be sent to this list.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="span-21">
|
||||||
|
<div id="tip">
|
||||||
|
To learn more about how to use Git, move along to the <a href="/documentation">Documentation</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(function() {
|
||||||
|
$('#git-is').corner();
|
||||||
|
$('.example').corner();
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -0,0 +1,91 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title>Git - Fast Version Control System</title>
|
||||||
|
<meta name="description" content="Home of the Git Version Control System and Friends" />
|
||||||
|
<meta name="authors" content="Petr Baudis, Scott Chacon" />
|
||||||
|
<meta http-equiv="reply-to" content="schacon@gmail.com" />
|
||||||
|
<meta http-equiv="content-language" content="en" />
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||||
|
<link rel="icon" href="favicon.png" type="image/png" />
|
||||||
|
<link rel="stylesheet" href="blueprint/screen.css" type="text/css" media="screen, projection" />
|
||||||
|
<link rel="stylesheet" href="blueprint/print.css" type="text/css" media="print" />
|
||||||
|
<!--[if IE]><link rel="stylesheet" href="blueprint/ie.css" type="text/css" media="screen, projection" /><![endif]-->
|
||||||
|
<link rel="stylesheet" href="stylesheets/style.css" type="text/css" media="screen, projection" />
|
||||||
|
<script type="text/javascript" src="javascripts/jquery-1.2.6.min.js"></script>
|
||||||
|
<script type="text/javascript" src="javascripts/jquery.corner.js"></script>
|
||||||
|
|
||||||
|
<link rel="alternate" type="application/rss+xml" title="RSS" href="http://feeds.feedburner.com/GitReleases" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="container showgrids">
|
||||||
|
|
||||||
|
<div class="span-21 header">
|
||||||
|
<a href="/"><img alt="Git - the fast version control system" src="/images/header.gif" /></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="span-21 navbar">
|
||||||
|
<div id="toc">
|
||||||
|
<ul class="a-<%= @action %>">
|
||||||
|
<li id="m-index"><a href="/">Home</a></li>
|
||||||
|
<li id="m-about"><a href="/about">About Git</a></li>
|
||||||
|
<li id="m-documentation"><a href="/documentation">Documentation</a></li>
|
||||||
|
<li id="m-download"><a href="/download">Download</a></li>
|
||||||
|
<li id="m-tools"><a href="/tools">Tools & Hosting</a></li>
|
||||||
|
<!-- <li id="m-wiki"><a href="http://git.wiki.kernel.org/index.php/Main_Page">Wiki</a></li> -->
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="span-21">
|
||||||
|
<br/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<%= yield %>
|
||||||
|
|
||||||
|
<div class="span-21">
|
||||||
|
<br/><br/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="span-4 center" id="sfc-footer">
|
||||||
|
Git is a member of the <a href="/sfc">Software Freedom Conservancy</a>
|
||||||
|
<br/>
|
||||||
|
</div>
|
||||||
|
<div class="span-13 footer">
|
||||||
|
<div class="menu">
|
||||||
|
This page is maintained by Scott Chacon.
|
||||||
|
<br/>
|
||||||
|
Please email me at <a href="mailto:schacon@gmail.com">schacon@gmail.com</a>
|
||||||
|
with patches, suggestions and comments.
|
||||||
|
<p>Source for this <a href="http://github.com/schacon/gitscm/tree/master">website</a>
|
||||||
|
was forked from Petr Baudis's <a href="http://git.or.cz/index.html">git.or.cz</a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="span-4 last center">
|
||||||
|
hosting donated by:
|
||||||
|
<a href="http://github.com"><img src="images/github.png" alt="github logo" /></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(function() {
|
||||||
|
$('.footer').corner();
|
||||||
|
$('#sfc-footer').corner();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
|
||||||
|
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
var pageTracker = _gat._getTracker("UA-82337-12");
|
||||||
|
pageTracker._initData();
|
||||||
|
pageTracker._trackPageview();
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,91 @@
|
||||||
|
<h2 id="sfc">Git and The Software Freedom Conservancy</h2>
|
||||||
|
|
||||||
|
<p>Git is a member project of the <a href="http://sfconservancy.org/">Software
|
||||||
|
Freedom Conservancy</a>. The SFC is a not-for-profit organization that
|
||||||
|
provides financial and administrative assistance to open source projects.
|
||||||
|
|
||||||
|
<h2 class="section-start">Donation</h2>
|
||||||
|
|
||||||
|
<p>The SFC accepts donations on git's behalf. In the past, project money has
|
||||||
|
typically gone to defraying travel costs for developers to come to our annual
|
||||||
|
<a href="https://git.wiki.kernel.org/index.php/GitTogether">GitTogether</a>
|
||||||
|
mini-conference. A portion of the money goes to the SFC to cover their
|
||||||
|
operating expenses. You can also donate <a
|
||||||
|
href="http://sfconservancy.org/donate">directly</a> to the Conservancy's
|
||||||
|
general fund.
|
||||||
|
|
||||||
|
<table class="data-table software">
|
||||||
|
<tr><td valign="top">
|
||||||
|
<h3 class="title">Google Checkout</h3>
|
||||||
|
<p>To donate to git via Google Checkout:
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
function validateAmount(amount){
|
||||||
|
if(amount.value.match( /^[0-9]+(\.([0-9]+))?$/)){
|
||||||
|
return true;
|
||||||
|
}else{
|
||||||
|
alert('You must enter a valid donation.');
|
||||||
|
amount.focus();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<form action="https://checkout.google.com/cws/v2/Donations/622836985124940/checkoutForm" id="BB_BuyButtonForm" method="post" name="BB_BuyButtonForm" onSubmit="return validateAmount(this.item_price_1)" target="_top">
|
||||||
|
<input name="item_name_1" type="hidden" value="Git Donation via Software Freedom Conservancy"/>
|
||||||
|
<input name="item_description_1" type="hidden" value="Donation to the Git Project via the Software Freedom Conservancy."/>
|
||||||
|
<input name="item_quantity_1" type="hidden" value="1"/>
|
||||||
|
<input name="item_currency_1" type="hidden" value="USD"/>
|
||||||
|
<input name="item_is_modifiable_1" type="hidden" value="true"/>
|
||||||
|
<input name="item_min_price_1" type="hidden" value="5.0"/>
|
||||||
|
<input name="item_max_price_1" type="hidden" value="25000.0"/>
|
||||||
|
<input name="_charset_" type="hidden" value="utf-8"/>
|
||||||
|
<table cellpadding="5" cellspacing="0" width="1%">
|
||||||
|
<tr>
|
||||||
|
<td align="right" nowrap="nowrap" width="1%">$ <input id="item_price_1" name="item_price_1" onfocus="this.style.color='black'; this.value='';" size="11" style="color:grey;" type="text" value="Enter Amount"/>
|
||||||
|
</td>
|
||||||
|
<td align="left" width="1%">
|
||||||
|
<input alt="Donate" src="https://checkout.google.com/buttons/donateNow.gif?merchant_id=622836985124940&w=115&h=50&style=white&variant=text&loc=en_US" type="image"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
</td><td valign="top">
|
||||||
|
<h3 class="title">Paypal</h3>
|
||||||
|
<p>We can also accept PayPal donations, but note that the fees are
|
||||||
|
higher for Paypal than other options, so less of your money makes it to
|
||||||
|
the project.
|
||||||
|
<div class="center">
|
||||||
|
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
|
||||||
|
<input type="hidden" name="cmd" value="_s-xclick">
|
||||||
|
<input type="hidden" name="hosted_button_id" value="GXTE9AECX4LAL">
|
||||||
|
<input type="image"
|
||||||
|
src="https://www.paypal.com/en_US/i/btn/btn_donateCC_LG.gif"
|
||||||
|
border="0" name="submit"
|
||||||
|
alt="PayPal - The safer, easier way to pay online!">
|
||||||
|
<img alt="" border="0" height="1" width="1"
|
||||||
|
src="https://www.paypal.com/en_US/i/scr/pixel.gif">
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
<h3 class="title">Check or Wire</h3>
|
||||||
|
<p>We can also accept donations drawn in USD from banks in the USA
|
||||||
|
(donations from banks outside of the US or not in USD should be handled
|
||||||
|
by wire). Make checks payable to "Software Freedom Conservancy, Inc."
|
||||||
|
and place "Directed donation: Git" in the memo field. Checks should be
|
||||||
|
mailed to:
|
||||||
|
<div class="center">
|
||||||
|
<pre>
|
||||||
|
Software Freedom Conservancy, Inc.
|
||||||
|
137 Montague ST STE 380
|
||||||
|
BROOKLYN, NY 11201 USA
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>The SFC can accept wire donations, but the instructions vary
|
||||||
|
depending on the country of origin. Please contact <a
|
||||||
|
href="mailto:accounting@sfconservancy.org">accounting@sfconservancy.org</a>
|
||||||
|
for instructions.
|
||||||
|
|
|
@ -0,0 +1,530 @@
|
||||||
|
<div class="doc-section">
|
||||||
|
|
||||||
|
<h1>Git - SVN Crash Course</h1>
|
||||||
|
|
||||||
|
<p>Welcome to the Git version control system! Here we will briefly
|
||||||
|
introduce you to Git usage based on your current Subversion knowledge. You will
|
||||||
|
need the latest <a href="http://git.or.cz/">Git</a> installed;
|
||||||
|
There is also a potentially useful
|
||||||
|
<a href="http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html">
|
||||||
|
tutorial</a> in the Git documentation.</p>
|
||||||
|
|
||||||
|
<div class="doc-toc">
|
||||||
|
<ul>
|
||||||
|
<li><a href="#read">How to Read Me</a></li>
|
||||||
|
<li><a href="#know">Things To Know</a></li>
|
||||||
|
<li><a href="#commit">Commiting</a></li>
|
||||||
|
<li><a href="#browse">Browsing</a></li>
|
||||||
|
<li><a href="#branch">Tagging and Branching</a></li>
|
||||||
|
<li><a href="#merge">Merging</a></li>
|
||||||
|
<li><a href="#remote">Going Remote</a></li>
|
||||||
|
<li><a href="#share">Sharing the Work</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="text-align:center;"><table class="relnotes" style="margin-left: auto; margin-right: auto; border: 1px">
|
||||||
|
<tr><td style="text-align:center;">
|
||||||
|
<p style="margin: 0em 0.4em">If you are just after tracking someone else's project,
|
||||||
|
this get you started quickly:</p>
|
||||||
|
<p/>
|
||||||
|
<table class="ccmd" style="margin:0em; margin-left: auto; margin-right: auto;"><tr>
|
||||||
|
<td class="g">git clone <em>url</em><br />git pull</td>
|
||||||
|
|
||||||
|
<td>svn checkout <em>url</em><br />svn update</td>
|
||||||
|
</tr></table>
|
||||||
|
</td></tr>
|
||||||
|
</table></div>
|
||||||
|
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<h2 id="read">How to Read Me</h2>
|
||||||
|
|
||||||
|
<p>In those small tables, at the left we always list the Git commands
|
||||||
|
for the task, while at the right the corresponding Subversion commands you would use
|
||||||
|
for the job are listed. If you are in hurry, just skimming over them should
|
||||||
|
give you a good idea about the Git usage basics.</p>
|
||||||
|
|
||||||
|
<p>Before running any command the first time, it's recommended that you
|
||||||
|
at least quickly skim through its manual page. Many of the commands have
|
||||||
|
very useful and interesting features (that we won't list here) and sometimes
|
||||||
|
there are some extra notes you might want to know. There's a quick usage
|
||||||
|
help available for the Git commands if you pass them the <code>-h</code>
|
||||||
|
switch.</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h2 id="know">Things You Should Know</h2>
|
||||||
|
|
||||||
|
<p>There are couple important concepts it is good to know when
|
||||||
|
starting with Git. If you are in hurry though, you can skip this
|
||||||
|
section and only get back to it when you get seriously confused;
|
||||||
|
it should be possible to pick up with just using your intuition.</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
|
||||||
|
<b>Repositories.</b>
|
||||||
|
With Subversion, for each project there is a single repository at some
|
||||||
|
detached central place where all the history is and which you checkout
|
||||||
|
and commit into. Git works differently, each copy of the project tree
|
||||||
|
(we call that the <em>working copy</em>) carries its own repository
|
||||||
|
around (in the <code>.git</code> subdirectory in the project tree root).
|
||||||
|
So you can have local and remote branches.
|
||||||
|
You can also have a so-called <em>bare repository</em> which is not
|
||||||
|
attached to a working copy; that is useful especially when you want
|
||||||
|
to publish your repository. We will get to that.
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<b>URL.</b>
|
||||||
|
In Subversion the <em>URL</em> identifies the location of the repository
|
||||||
|
and the path inside the repository, so you organize the layout of the
|
||||||
|
repository and its meaning. Normally you would have <code>trunk/</code>,
|
||||||
|
|
||||||
|
<code>branches/</code> and <code>tags/</code> directories. In Git
|
||||||
|
the <em>URL</em> is just the location of the repository, and it always
|
||||||
|
contains branches and tags. One of the branches is the default (normally named
|
||||||
|
master).
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<b>Revisions.</b>
|
||||||
|
Subversion identifies revisions with ids of decimal numbers growing
|
||||||
|
monotonically which are typically small (although they can get quickly
|
||||||
|
to hundreds of thousands for large projects). That is impractical in distributed systems like Git. Git
|
||||||
|
identifies revisions with SHA1 ids, which are long 160-bit numbers
|
||||||
|
written in hexadecimal. It may look scary at first, but in practice it is
|
||||||
|
not a big hurdle - you can refer to the latest revision by <code>HEAD</code>,
|
||||||
|
its parent as <code>HEAD^</code> and its parent as <code>HEAD^^ = HEAD~2</code>
|
||||||
|
|
||||||
|
(you can go on adding carrets),
|
||||||
|
cut'n'paste helps a lot and you can write only the few leading digits
|
||||||
|
of a revision - as long as it is unique, Git will guess the rest.
|
||||||
|
(You can do even more advanced stuff with revision specifiers, see the
|
||||||
|
<a href="http://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html">git-rev-parse manpage</a> for details.)
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<b>Commits.</b>
|
||||||
|
Each commit has an <em>author</em> and a <em>committer</em> field,
|
||||||
|
which record who and when <em>created</em> the change and who <em>committed</em> it
|
||||||
|
(Git is designed to work well with patches coming by mail - in that case,
|
||||||
|
the author and the committer will be different). Git will try to guess
|
||||||
|
your realname and email, but especially with email it is likely to get it wrong.
|
||||||
|
You can check it using <code class="g">git config -l</code> and set them with:
|
||||||
|
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
git config --global user.name "Your Name Comes Here"
|
||||||
|
git config --global user.email you@yourdomain.example.com
|
||||||
|
</pre>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<b>Commands.</b>
|
||||||
|
The Git commands are in the form <code>git command</code>.
|
||||||
|
You can interchangeably use the <code>git-command</code>
|
||||||
|
form as well.
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
|
||||||
|
<b>Colors.</b>
|
||||||
|
Git can produce colorful output with some commands; since
|
||||||
|
some people hate colors way more than the rest likes them, by default
|
||||||
|
the colors are turned off. If you would like to have colors in your
|
||||||
|
output:
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
git config --global color.diff auto
|
||||||
|
git config --global color.status auto
|
||||||
|
git config --global color.branch auto
|
||||||
|
</pre>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li>
|
||||||
|
<b>Visualize.</b>
|
||||||
|
You may find it convenient to watch your repository using
|
||||||
|
the <code class="g">gitk</code> repository as you go.
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2 id="commit">Commiting</h2>
|
||||||
|
|
||||||
|
<p>For the first introduction, let's make your project tracked by Git
|
||||||
|
and see how we get around to do daily development in it. Let's
|
||||||
|
<code>cd</code> to the directory with your project and initialize
|
||||||
|
a brand new Git repository with it:</p>
|
||||||
|
|
||||||
|
<table class="ccmd">
|
||||||
|
<tr><td class="g">git init<br/>git add .<br/>git commit</td>
|
||||||
|
|
||||||
|
<td>svnadmin create <em>repo</em><br/>svn import <em>file://repo</em></td></tr></table>
|
||||||
|
|
||||||
|
<p><code>git init</code> will initialize the repository,
|
||||||
|
<code>git add .</code> will add all the files under the current directory
|
||||||
|
and <code>git commit</code> will create the
|
||||||
|
initial import, given that repositories are coupled with working copies.</p>
|
||||||
|
|
||||||
|
<p>Now your tree is officially tracked by Git. You can explore the
|
||||||
|
<code class="g">.git</code> subdirectory a bit if you want, or don't if you
|
||||||
|
don't care. Do some random changes to your tree now - poke into few
|
||||||
|
files or such. Let's check what we've done:</p>
|
||||||
|
|
||||||
|
<table class="ccmd"><tr>
|
||||||
|
<td class="g">git diff</td>
|
||||||
|
<td>svn diff | less</td>
|
||||||
|
</tr></table>
|
||||||
|
|
||||||
|
<p>That's it. This is one of the more powerful commands. To get a diff with an
|
||||||
|
specific revision and path do:</p>
|
||||||
|
|
||||||
|
<table class="ccmd"><tr>
|
||||||
|
<td class="g">git diff <em>rev</em> <em>path</em></td>
|
||||||
|
<td>svn diff -r<em>rev</em> <em>path</em></td>
|
||||||
|
</tr></table>
|
||||||
|
|
||||||
|
<p>Git embeds special information in
|
||||||
|
the diffs about adds, removals and mode changes:</p>
|
||||||
|
|
||||||
|
<table class="ccmd"><tr>
|
||||||
|
<td class="g">git apply</td>
|
||||||
|
<td>patch -p0</td>
|
||||||
|
</tr></table>
|
||||||
|
|
||||||
|
<p>That will apply the patch while telling Git about and performing
|
||||||
|
those "meta-changes".</p>
|
||||||
|
|
||||||
|
<p>There is a more concise representation of changes available:</p>
|
||||||
|
|
||||||
|
<table class="ccmd"><tr>
|
||||||
|
|
||||||
|
<td class="g">git status</td>
|
||||||
|
<td>svn status</td>
|
||||||
|
</tr></table>
|
||||||
|
|
||||||
|
<p>This will show the concise changes summary as well as list any files
|
||||||
|
that you haven't either ignored or told Git about. In addition,
|
||||||
|
it will also show at the top which branch you are in.</p>
|
||||||
|
|
||||||
|
<p>While we are at the status command, over time plenty of the
|
||||||
|
"Untracked files" will get in there, denoting files not tracked by Git.
|
||||||
|
Wait a moment if you want to add them, run <code class="g">git clean</code>
|
||||||
|
if you want to get rid of all of them, or add them to the <code class="g">.gitignore</code>
|
||||||
|
|
||||||
|
file if you want to keep them around untracked (works the same as the <code>svn:ignore</code>
|
||||||
|
property in SVN).</p>
|
||||||
|
|
||||||
|
<p>To restore a file from the last revision:</p>
|
||||||
|
|
||||||
|
<table class="ccmd"><tr>
|
||||||
|
<td class="g">git checkout <em>path</em></td>
|
||||||
|
<td>svn revert <em>path</em></td>
|
||||||
|
|
||||||
|
</tr></table>
|
||||||
|
|
||||||
|
<p>You can restore everything or just specified files.</p>
|
||||||
|
|
||||||
|
<p>So, just like in SVN, you need to tell Git when you add, move or
|
||||||
|
remove any files:</p>
|
||||||
|
|
||||||
|
<table class="ccmd"><tr>
|
||||||
|
<td class="g">git add <em>file</em>
|
||||||
|
<br />git rm <em>file</em>
|
||||||
|
|
||||||
|
<br />git mv <em>file</em></td>
|
||||||
|
<td>svn add <em>file</em><br />svn rm <em>file</em><br />svn mv <em>file</em></td></tr></table>
|
||||||
|
|
||||||
|
<p>You can also recursively add/remove whole directories and so on;
|
||||||
|
Git's cool!</p>
|
||||||
|
|
||||||
|
<p>So, it's about time we commit our changes. Big surprise
|
||||||
|
about the command:</p>
|
||||||
|
|
||||||
|
<table class="ccmd"><tr>
|
||||||
|
<td class="g">git commit -a</td>
|
||||||
|
<td>svn commit</td>
|
||||||
|
</tr></table>
|
||||||
|
|
||||||
|
<p>to commit all the changes or, as with Subversion,
|
||||||
|
you can limit the commit only to specified files
|
||||||
|
and so on. A few words on the commit message: it is <em>customary</em>
|
||||||
|
to have a short commit summary as the first line of the message,
|
||||||
|
because various tools listing commits frequently show only the
|
||||||
|
first line of the message. You can specify the commit message
|
||||||
|
using the <code>-m</code> parameter as you are used, but
|
||||||
|
you can pass several <code>-m</code> arguments and they will create
|
||||||
|
separate paragraphs in the commit message:</p>
|
||||||
|
|
||||||
|
<p>If you don't pass any <code>-m</code> parameter or pass
|
||||||
|
the <code>-e</code> parameter, your favorite <code>$EDITOR</code>
|
||||||
|
will get run and you can compose your commit message there,
|
||||||
|
just as with Subversion. In addition, the list of files to be committed
|
||||||
|
is shown.</p>
|
||||||
|
|
||||||
|
<p>And as a bonus, if you pass it the <code>-v</code> parameter
|
||||||
|
it will show the whole patch being committed in the editor
|
||||||
|
so that you can do a quick last-time review.</p>
|
||||||
|
|
||||||
|
<p>By the way, if you screwed up committing, there's not much you
|
||||||
|
can do with Subversion, except using some enigmatic <code>svnadmin</code>
|
||||||
|
subcommands. Git does it better - you can amend your latest commit
|
||||||
|
(re-edit the metadata as well as update the tree) using
|
||||||
|
<code class="g">git commit --amend</code>, or toss your latest
|
||||||
|
commit away completely using <code class="g">git reset HEAD^</code>,
|
||||||
|
this will not change the working tree.</p>
|
||||||
|
|
||||||
|
<h2 id="browse">Browsing</h2>
|
||||||
|
|
||||||
|
<p>Now that we have committed some stuff, you might want to review
|
||||||
|
your history:</p>
|
||||||
|
|
||||||
|
<table class="ccmd"><tr>
|
||||||
|
<td class="g">git log<br />git blame <em>file</em></td>
|
||||||
|
<td>svn log | less<br />svn blame <em>file</em></td>
|
||||||
|
</tr></table>
|
||||||
|
|
||||||
|
<p>The log command works quite similar in SVN and Git; again,
|
||||||
|
<code>git log</code> is quite powerful, please look through
|
||||||
|
its options to see some of the stuff it can do.</p>
|
||||||
|
|
||||||
|
<p>The blame command is more powerful as it can detect the movement of lines,
|
||||||
|
even with file copies and renames. But there is a
|
||||||
|
big chance that you probably want to do something different! Usually,
|
||||||
|
when using annotate you are looking for the origin of some piece of
|
||||||
|
code, and the so-called <em>pickaxe</em> of Git is much more comfortable
|
||||||
|
tool for that job (<code>git log -S<em>string</em></code> shows the
|
||||||
|
commits which add or remove any file data matching <em>string</em>).</p>
|
||||||
|
|
||||||
|
<p>You can see the contents of a file, the listing of a directory or
|
||||||
|
a commit with:</p>
|
||||||
|
|
||||||
|
<table class="ccmd"><tr>
|
||||||
|
|
||||||
|
<td class="g">git show <em>rev</em>:<em>path/to/file</em>
|
||||||
|
<br />git show <em>rev</em>:<em>path/to/directory</em>
|
||||||
|
<br />git show <em>rev</em></td>
|
||||||
|
|
||||||
|
<td>svn cat <em>url</em>
|
||||||
|
<br />svn list <em>url</em>
|
||||||
|
<br />svn log -r<em>rev</em> <em>url</em>
|
||||||
|
<br />svn diff -c<em>rev</em> <em>url</em></td>
|
||||||
|
|
||||||
|
</tr></table>
|
||||||
|
|
||||||
|
<h2 id="branch">Tagging and branching</h2>
|
||||||
|
|
||||||
|
<p>Subversion marks certain checkpoints in history through copies, the copy is
|
||||||
|
usually placed in a directory named tags. Git tags are much more powerful.
|
||||||
|
The Git tag can have an arbitrary description attached (the first
|
||||||
|
line is special as in the commit case), some people actually store
|
||||||
|
the whole release announcements in the tag descriptions. The identity
|
||||||
|
of the person who tagged is stored (again following the same rules
|
||||||
|
as identity of the committer). You can tag other objects than commits (but
|
||||||
|
that is conceptually rather low-level operation).
|
||||||
|
And the tag can be cryptographically PGP signed to verify the identity
|
||||||
|
(by Git's nature of working, that signature also confirms the validity
|
||||||
|
of the associated revision, its history and tree). So, let's do it:</p>
|
||||||
|
|
||||||
|
<table class="ccmd"><tr>
|
||||||
|
<td class="g">git tag -a <em>name</em></td>
|
||||||
|
<td>svn copy http://example.com/svn/trunk
|
||||||
|
http://example.com/svn/tags/<em>name</em></td>
|
||||||
|
|
||||||
|
</tr></table>
|
||||||
|
|
||||||
|
<p>To list tags and to show the tag message:</p>
|
||||||
|
|
||||||
|
<table class="ccmd"><tr>
|
||||||
|
<td class="g">git tag -l<br />git show <em>tag</em></td>
|
||||||
|
<td>svn list http://example.com/svn/<em>tags/</em>
|
||||||
|
|
||||||
|
<br />svn log --limit 1 http://example.com/svn/tags/<em>tag</em></td>
|
||||||
|
</tr></table>
|
||||||
|
|
||||||
|
<p>Like Subversion, Git can do branches (surprise surprise!). In Subversion,
|
||||||
|
you basically copy your project to a subdirectory. In Git, you tell it,
|
||||||
|
well, to create a branch.</p>
|
||||||
|
|
||||||
|
<table class="ccmd"><tr>
|
||||||
|
<td class="g">git branch <em>branch</em>
|
||||||
|
|
||||||
|
<br />git checkout <em>branch</em></td>
|
||||||
|
<td>svn copy http://example.com/svn/trunk
|
||||||
|
http://example.com/svn/branches/<em>branch</em>
|
||||||
|
<br />svn switch
|
||||||
|
http://example.com/svn/branches/<em>branch</em></td>
|
||||||
|
</tr></table>
|
||||||
|
|
||||||
|
<p>The first command creates a branch, the second command switches
|
||||||
|
your tree to a certain branch. You can pass an extra argument to
|
||||||
|
<code>git branch</code> to base your new branch on a different
|
||||||
|
revision than the latest one.</p>
|
||||||
|
|
||||||
|
<p>You can list your branches conveniently using the aforementioned
|
||||||
|
<code>git-branch</code> command without arguments the listing of branches.
|
||||||
|
The current one is denoted by an "*".</p>
|
||||||
|
|
||||||
|
<table class="ccmd"><tr>
|
||||||
|
<td class="g">git branch</td>
|
||||||
|
<td>svn list http://example.com/svn/branches/</td>
|
||||||
|
</tr></table>
|
||||||
|
|
||||||
|
<p>To move your tree to some older revision, use:</p>
|
||||||
|
|
||||||
|
<table class="ccmd"><tr>
|
||||||
|
<td class="g">git checkout <em>rev</em>
|
||||||
|
<br />git checkout <em>prevbranch</em></td>
|
||||||
|
<td>svn update -r <em>rev</em><br />svn update</td>
|
||||||
|
</tr></table>
|
||||||
|
|
||||||
|
<p>or you could create a temporary branch. In Git you can make commits on
|
||||||
|
top of the older revision and use it as another branch.</p>
|
||||||
|
|
||||||
|
<h2 id="merge">Merging</h2>
|
||||||
|
|
||||||
|
<p>Git supports merging between branches much better than Subversion - history
|
||||||
|
of both branches is preserved over the merges and repeated merges
|
||||||
|
of the same branches are supported out-of-the-box. Make sure you are on
|
||||||
|
one of the to-be-merged branches and merge the other one now:</p>
|
||||||
|
|
||||||
|
<table class="ccmd"><tr>
|
||||||
|
<td class="g">git merge <em>branch</em></td>
|
||||||
|
<td>
|
||||||
|
svn merge -r 20:HEAD
|
||||||
|
http://example.com/svn/branches/<em>branch</em>
|
||||||
|
<br /><em>(assuming the branch was created in revision 20 and
|
||||||
|
you are inside a working copy of trunk)</em>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
</tr></table>
|
||||||
|
|
||||||
|
<p>If changes were made on only one of the branches since the last merge,
|
||||||
|
they are simply replayed on your other branch (so-called <em>fast-forward merge</em>).
|
||||||
|
If changes were made on both branches, they are merged intelligently
|
||||||
|
(so-called <em>three-way merge</em>): if any changes conflicted, <code>git merge</code>
|
||||||
|
will report them and let you resolve them, updating the rest of the tree
|
||||||
|
already to the result state; you can <code>git commit</code> when you resolve
|
||||||
|
the conflicts. If no changes conflicted, a commit is made automatically with
|
||||||
|
a convenient log message (or you can do
|
||||||
|
|
||||||
|
<code class="g">git merge --no-commit <em>branch</em></code> to review the merge
|
||||||
|
result and then do the commit yourself).</p>
|
||||||
|
|
||||||
|
<p>Aside from merging, sometimes you want to just pick one commit from
|
||||||
|
a different branch. To apply the changes in revision <em>rev</em> and commit
|
||||||
|
them to the current branch use:</p>
|
||||||
|
|
||||||
|
<table class="ccmd"><tr>
|
||||||
|
<td class="g">git cherry-pick <em>rev</em></td>
|
||||||
|
|
||||||
|
<td>svn merge -c <em>rev</em> <em>url</em></td>
|
||||||
|
</tr></table>
|
||||||
|
|
||||||
|
<h2 id="remote">Going Remote</h2>
|
||||||
|
|
||||||
|
<p>So far, we have neglected that Git is a <em>distributed</em> version
|
||||||
|
control system. It is time for us to set the record straight - let's grab
|
||||||
|
some stuff from remote sites.</p>
|
||||||
|
|
||||||
|
<p>If you are working on someone else's project, you usually want to <em>clone</em>
|
||||||
|
its repository instead of starting your own. We've already mentioned that at the top
|
||||||
|
of this document:</p>
|
||||||
|
|
||||||
|
<table class="ccmd"><tr>
|
||||||
|
<td class="g">git clone <em>url</em></td>
|
||||||
|
<td>svn checkout <em>url</em></td>
|
||||||
|
</tr></table>
|
||||||
|
|
||||||
|
<p>Now you have the default branch (normally <code>master</code>),
|
||||||
|
but in addition you got all the remote branches and tags.
|
||||||
|
In clone's default setup, the default local branch tracks
|
||||||
|
the <em>origin</em> remote, which represents the default branch in the
|
||||||
|
remote repository.</p>
|
||||||
|
|
||||||
|
<p><em>Remote branch</em>, you ask? Well, so far we have worked
|
||||||
|
only with local branches. Remote branches are a mirror image of branches
|
||||||
|
in remote repositories and you don't ever switch to them directly or write
|
||||||
|
to them. Let me repeat - you never mess with remote branches. If you want
|
||||||
|
to switch to a remote branch, you need to create a corresponding local
|
||||||
|
branch which will "track" the remote branch:</p>
|
||||||
|
|
||||||
|
<table class="ccmd"><tr>
|
||||||
|
<td class="g">
|
||||||
|
git checkout -b <em>branch</em> origin/<em>branch</em></td>
|
||||||
|
|
||||||
|
<td>svn switch <em>url</em></td></tr></table>
|
||||||
|
|
||||||
|
<p>You can add more remote branches to a cloned repository, as well as just
|
||||||
|
an initialized one, using <code class="g">git remote add <em>remote</em> <em>url</em></code>.
|
||||||
|
The command <code class="g">git remote</code> lists all the remotes
|
||||||
|
repositories and <code class="g">git remote show <em>remote</em></code> shows
|
||||||
|
the branches in a remote repository.</p>
|
||||||
|
|
||||||
|
<p>Now, how do you get any new changes from a remote repository?
|
||||||
|
You fetch them: <code class="g">git fetch</code>.
|
||||||
|
At this point they are in your repository and you can examine them using
|
||||||
|
<code>git log <em>origin</em></code> (<code>git log HEAD..<em>origin</em></code>
|
||||||
|
to see just the changes you don't have in your branch), diff them, and obviously, merge them - just do
|
||||||
|
<code>git merge <em>origin</em></code>. Note that if you don't specify a branch
|
||||||
|
to fetch, it will conveniently default to the tracking remote.</p>
|
||||||
|
|
||||||
|
<p>Since you frequently just fetch + merge the tracking remote branch,
|
||||||
|
there is a command to automate that:</p>
|
||||||
|
|
||||||
|
<table class="ccmd"><tr>
|
||||||
|
<td class="g">git pull</td>
|
||||||
|
<td>svn update</td>
|
||||||
|
</tr></table>
|
||||||
|
|
||||||
|
<h2 id="share">Sharing the Work</h2>
|
||||||
|
|
||||||
|
<p>Your local repository can be used by others to <em>pull</em> changes, but
|
||||||
|
normally you would have a private repository and a public repository.
|
||||||
|
The public repository is where everybody pulls and you... do the
|
||||||
|
opposite? <em>Push</em> your changes? Yes!
|
||||||
|
We do <code class="g">git push <em>remote</em></code> which will push
|
||||||
|
all the local branches with a corresponding remote branch - note that this works
|
||||||
|
generally only over SSH (or HTTP but with special webserver setup).
|
||||||
|
It is highly recommended to setup a SSH key and an SSH agent mechanism
|
||||||
|
so that you don't have to type in a password all the time.</p>
|
||||||
|
|
||||||
|
<p>One important thing is that you should push only to remote branches
|
||||||
|
that are not currently checked out on the other side (for the same
|
||||||
|
reasons you never switch to a remote branch locally)! Otherwise the
|
||||||
|
working copy at the remote branch will get out of date and confusion
|
||||||
|
will ensue. The best way to avoid that is to push only to remote
|
||||||
|
repositories with no working copy at all - so called <em>bare</em>
|
||||||
|
repositories which are commonly used for public access or developers'
|
||||||
|
meeting point - just for exchange of history where a checked out copy
|
||||||
|
would be a waste of space anyway. You can create such a repository.
|
||||||
|
See <a href="http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#setting-up-a-public-repository">Setting up a public repository</a> for details.</p>
|
||||||
|
|
||||||
|
<p>Git can work with the same workflow as Subversion, with a group of developers
|
||||||
|
using a single repository for exchange of their work. The only change
|
||||||
|
is that their changes aren't submitted automatically but they have
|
||||||
|
to push (however, you can setup a post-commit hook that will push for you
|
||||||
|
every time you commit; that loses the flexibility to fix up a screwed
|
||||||
|
commit, though). The developers must have either an entry in htaccess
|
||||||
|
(for HTTP DAV) or a UNIX account (for SSH). You can restrict their
|
||||||
|
shell account only to Git pushing/fetching by using the
|
||||||
|
<code class="g">git-shell</code> login shell.</p>
|
||||||
|
|
||||||
|
<p>You can also exchange patches by mail. Git has very good support
|
||||||
|
for patches incoming by mail. You can apply them by feeding mailboxes
|
||||||
|
with patch mails to <code class="g">git am</code>. If you
|
||||||
|
want to <em>send</em> patches use <code class="g">git format-patch</code> and
|
||||||
|
possibly <code class="g">git send-email</code>.
|
||||||
|
To maintain a set of patches it is best to use
|
||||||
|
the <strong>StGIT</strong> tool (see
|
||||||
|
the <a href="stgit.html">StGIT Crash Course</a>).</p>
|
||||||
|
|
||||||
|
<p>If you have any questions or problems which are not obvious from
|
||||||
|
the documentation, please contact us at the <strong>Git mailing list</strong>
|
||||||
|
at <a href="mailto:git@vger.kernel.org">git@vger.kernel.org</a>.
|
||||||
|
We hope you enjoy using Git!</p>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
|
@ -0,0 +1,151 @@
|
||||||
|
|
||||||
|
<h2 id="tools">Interface Tools</h2>
|
||||||
|
|
||||||
|
<p>Git is a true UNIX tool in the sense that it consists of many commands
|
||||||
|
that do one thing well. It has been designed from the start to be easily
|
||||||
|
wrapped in other tools and frontends. Currently, there are several
|
||||||
|
interfaces offering more comfortable Git usage, and also graphical
|
||||||
|
interfaces for browsing the history and more.</p>
|
||||||
|
|
||||||
|
<p>Traditionally, the low-level part of Git is called <em>plumbing</em>
|
||||||
|
and the interfaces and frontends are called <em>porcelains</em>.
|
||||||
|
Git itself comes with a default porcelain bundled and that is actually
|
||||||
|
what you will normally mean when you say you use Git. However, there
|
||||||
|
are several alternative porcelains which might offer considerably more
|
||||||
|
user friendly interface or extend Git to perform some specialized tasks.</p>
|
||||||
|
|
||||||
|
<p>Below, the most widely used tools are listed. Please refer to
|
||||||
|
<a href="http://git.wiki.kernel.org/index.php/InterfacesFrontendsAndTools">the corresponding wiki page</a>
|
||||||
|
for a full list.</p>
|
||||||
|
|
||||||
|
<table class="data-table software">
|
||||||
|
<tr valign="top">
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<h3 class="title">Graphical User Interfaces</h3>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt id="gitextensions">Git Extensions (Windows)</dt>
|
||||||
|
<dd><a href="http://sourceforge.net/projects/gitextensions/">Git Extensions</a>
|
||||||
|
is a small toolset to make working with Git under Windows a
|
||||||
|
little more intuitive. The shell extension will intergrate in Windows Explorer
|
||||||
|
and presents a nice context menu on files.</dd>
|
||||||
|
|
||||||
|
<dt id="tortoisegit">TortoiseGit (Windows)</dt>
|
||||||
|
<dd><a href="http://code.google.com/p/tortoisegit/">TortoiseGit</a>
|
||||||
|
is a port of the popular TortoiseSVN project to Git.
|
||||||
|
TortoiseGit is very complete, able to commit, show the history log, diff two versions,
|
||||||
|
create branches and tags, create patches and more.</dd>
|
||||||
|
|
||||||
|
<dt id="gitx">GitX (Mac OS X)</dt>
|
||||||
|
<dd><a href="http://gitx.frim.nl">GitX</a>
|
||||||
|
is a git GUI specifically for Mac OS X. It currently features a history viewer
|
||||||
|
much like gitk and a commit GUI like git gui. But then in silky smooth OS X style!</dd>
|
||||||
|
|
||||||
|
<dt id="qgit">qgit (Qt)</dt>
|
||||||
|
<dd><a href="http://sourceforge.net/projects/qgit">qgit</a> is a Qt
|
||||||
|
GUI for browsing history of Git repositories, similar to <em>gitk</em>
|
||||||
|
but with more features.</dd>
|
||||||
|
|
||||||
|
<dt id="tig">Tig</dt>
|
||||||
|
<dd><a href="http://jonas.nitro.dk/tig/">tig</a>
|
||||||
|
is a text-mode interface for Git. It acts as a repository browser
|
||||||
|
that can also act as a pager for various Git commands
|
||||||
|
and manage your index (on diff chunk level).</dd>
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<h3>Version Control Interface layers</h3>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
|
||||||
|
<dt id="stgit">StGIT</dt>
|
||||||
|
<dd><a href="http://www.procode.org/stgit/">Stacked Git</a> provides
|
||||||
|
a <em>Quilt</em>-like patch management functionality in the Git environment.
|
||||||
|
You can easily manage your patches in the scope of Git until they get
|
||||||
|
merged upstream.</dd>
|
||||||
|
|
||||||
|
<dt id="guilt">Guilt</dt>
|
||||||
|
<dd><a href="http://www.kernel.org/pub/linux/kernel/people/jsipek/guilt/">Guilt</a>
|
||||||
|
is another patch management tool, closer to the spirit of <em>Quilt</em>
|
||||||
|
than StGIT.</dd>
|
||||||
|
|
||||||
|
<dt id="cogito">TopGit</dt>
|
||||||
|
<dd><a href="http://repo.or.cz/w/topgit.git">TopGit</a>
|
||||||
|
aims to make handling of large amount of interdependent topic branches easier.
|
||||||
|
TopGit achieves that by keeping a separate topic branch
|
||||||
|
for each patch and providing few tools to maintain the branches.</dd>
|
||||||
|
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
<h2 id="hosting">Git Hosting</h2>
|
||||||
|
|
||||||
|
<p>Several Git hosting sites are available and open for anyone
|
||||||
|
to host their projects publicly or privately, serving personal open source
|
||||||
|
projects up to large professional endeavors:</p>
|
||||||
|
|
||||||
|
<table class="data-table hosting">
|
||||||
|
<tr>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
|
||||||
|
<h3>Public Only Hosting</h3>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt id="repo">repo.or.cz</dt>
|
||||||
|
<dd><a href="http://repo.or.cz/">repo.or.cz</a> is the oldest hosting site,
|
||||||
|
accomodating many hundreds of projects, with open-sourced infrastructure
|
||||||
|
and aimed at open source software. It provides full push features as well
|
||||||
|
as simple mirroring mode and gitweb interface with various enhancements.</dd>
|
||||||
|
|
||||||
|
<dt id="gitorious">Gitorious</dt>
|
||||||
|
<dd><a href="http://gitorious.org/">Gitorious</a> is another free hosting
|
||||||
|
site with a custom web interface, supporting multiple repositories per project,
|
||||||
|
local installations and with open source code.</dd>
|
||||||
|
</dl>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
<h3>Public and Private Hosting</h3>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt id="github">GitHub</dt>
|
||||||
|
<dd><a href="http://github.com/">GitHub</a> is the largest hosting site with over
|
||||||
|
1,000,000 public repositories and
|
||||||
|
provides both free hosting for public projects and paid options for private
|
||||||
|
projects. It uses a custom web interface including git-backed wiki hosting,
|
||||||
|
git-backed static site hosting and ticketing. GitHub puts emphasis
|
||||||
|
on social networking of project developers.</dd>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
<h3>Private Only Hosting</h3>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt id="unfuddle">Unfuddle</dt>
|
||||||
|
<dd>
|
||||||
|
<a href="http://unfuddle.com/">Unfuddle</a> is a secure, hosted project
|
||||||
|
management solution for software development teams.
|
||||||
|
Offers secure code repositories, ticketing systems and
|
||||||
|
project management tools.
|
||||||
|
</dd>
|
||||||
|
|
||||||
|
<dt id="codebase">codebase</dt>
|
||||||
|
<dd>
|
||||||
|
<a href="http://www.codebasehq.com/">codebase</a> offers
|
||||||
|
source control, issue/ticket management & deployment tracking.
|
||||||
|
</dd>
|
||||||
|
</dl>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<p style="text-align: right; font-size: small"><a href="http://git.wiki.kernel.org/index.php/GitHosting">more sites</a></p>
|