20160406-dropbox-git.html 20.1 KB
Newer Older
GI's avatar
GI committed
1 2 3 4 5 6 7 8 9
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="author" content="Gautam Iyer">
    <title>
      Using git and Dropbox
GI's avatar
GI committed
10
    </title><link rel="stylesheet"
GI's avatar
GI committed
11 12 13
	href="/dev/static/bootstrap/3.3.7/css/bootstrap.css">
      <link rel="stylesheet"
	href="/share/css/pygments-theme.css">
GI's avatar
GI committed
14
      <link rel="stylesheet" href="/share/css/local.css"><!--[if lt IE 9]>
GI's avatar
GI committed
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.js">
      </script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.js">
      </script>
    <![endif]-->
  </head>
  <body style='position: relative' data-spy='scroll' data-target='#col-right'>
  <nav class="navbar navbar-default navbar-static-top">
    <div class="container">
      <div class="navbar-header">
	<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
	  <span class="sr-only">Toggle navigation</span>
	  <span class="icon-bar"></span>
	  <span class="icon-bar"></span>
	  <span class="icon-bar"></span>
	</button>
	<a class="navbar-brand" href="http://localhost:8000">Gautam Iyer</a>
      </div>
      <div id="navbar" class="navbar-collapse collapse">
	<ul class="nav navbar-nav">
GI's avatar
GI committed
35
	  <li>
GI's avatar
GI committed
36 37
	      <a href="http://localhost:8000/index.html">Research</a>
	    </li>
GI's avatar
GI committed
38
	  <li>
GI's avatar
GI committed
39 40
	      <a href="http://localhost:8000/teaching">Teaching</a>
	    </li>
GI's avatar
GI committed
41
	  <li>
GI's avatar
GI committed
42 43
	      <a href="http://localhost:8000/contact.html">CV/Contact</a>
	    </li>
GI's avatar
GI committed
44
	  </ul>
GI's avatar
GI committed
45
	<ul class="nav navbar-nav navbar-right">
GI's avatar
GI committed
46
	  <li class='disabled'>
GI's avatar
GI committed
47 48
	      <a href="#">Code</a>
	    </li>
GI's avatar
GI committed
49
	  <li class='active'>
GI's avatar
GI committed
50 51
	      <a href="http://localhost:8000/blog">Blog</a>
	    </li>
GI's avatar
GI committed
52
	  <li>
GI's avatar
GI committed
53 54
	      <a href="http://localhost:8000/dev/test">Test</a>
	    </li>
GI's avatar
GI committed
55
	  </ul>
GI's avatar
GI committed
56 57
      </div><!--/.nav-collapse -->
    </div>
GI's avatar
GI committed
58 59
  </nav><div class='container'>
      <div class='row'>
GI's avatar
GI committed
60
    <div class='col-md-9' id='col-main'>
GI's avatar
GI committed
61 62
      <div class='justify'>
    <h1>
GI's avatar
GI committed
63
	  Using git and Dropbox
GI's avatar
GI committed
64
	  <br />
GI's avatar
GI committed
65
	    <small>2016-04-06</small>
GI's avatar
GI committed
66
	  </h1>
GI's avatar
GI committed
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
      <p><a href="https://www.dropbox.com/">Dropbox</a> isn&rsquo;t version control.
If you use <a href="https://git-scm.com/">git</a> to version control your files, and
have co-authors that use <code>Dropbox</code> then here is a way to use the two
systems together.</p>
<h2 id="make-your-shared-dropbox-folder-have-a-separate-repository">Make your shared Dropbox folder have a separate repository</h2>
<p>I&rsquo;d like my shared <a href="https://www.dropbox.com/">Dropbox</a> folder to be a full fledged git repository, and
version control all relevant files there via <a href="https://git-scm.com/">git</a>. However, git repositories
usually contain a special <code>.git/</code> folder in the root. Storing this special
<code>.git/</code> folder in a <strong>shared dropbox folder</strong> is a recipe for disaster. A
non-git aware collaborator will certainly wreak havoc on it. Further, doing
most git operations (even if they are simply checking the status) will push
notifications to all your collaborator saying that a few git files have
changed.</p>
<p>This can be annoying (and disastrous). A better alternative is to set up your
shared Dropbox folder to be a git repository, but store the git repository (the
<code>.git/</code> folder) in a separate (non-dropbox) directory.</p>
GI's avatar
GI committed
83 84 85 86 87 88 89
<div class="codehilite"><pre><span></span><span class="gp">$</span> <span class="nb">cd</span> ~/Dropbox/shared/foo
<span class="gp">$</span> dropbox exclude add .git
<span class="go">Excluded:</span>
<span class="go">.git</span>
<span class="gp">$</span> mkdir -p <span class="nv">$HOME</span>/.separate-gitroots
<span class="gp">$</span> git init --separate-git-dir<span class="o">=</span><span class="nv">$HOME</span>/.separate-gitroots/foo.git
<span class="go">Initialized empty Git repository in /home/gautam/.separate-gitroots/foo.git</span>
GI's avatar
GI committed
90 91 92
</pre></div>


GI's avatar
GI committed
93 94 95
<p>This creates the git repository in <code>$HOME/.separate-gitroots/foo.git</code> instead
of in <code>./.git/</code> as is customary. Now <code>./.git</code> will be a plain text file (not
folder) that contains the location of the <code>foo.git</code> directory above.</p>
GI's avatar
GI committed
96 97 98 99 100 101 102 103 104 105 106
<p>Obviously <code>./.git</code> will be truly useless to anyone else sharing your Dropbox
folders,  so I recommend excluding it from the list of synchronized files. The
<code>dropbox exclude</code> command above does this using Dropbox&rsquo;s
<a href="https://www.dropbox.com/en/help/4456">Selective sync</a> feature.</p>
<h2 id="working-on-a-local-copy">Working on a local copy.</h2>
<p>I set up a local copy, away from Dropbox, to work on. This way a collaborator
who makes changes while I&rsquo;m working will not overwrite mine, and I can tell
the two changes apart easily. I also use a centralized remote (so I can share
it with git-aware co-authors), but you can do without it (if you know what
you&rsquo;re doing.)</p>
<h3 id="setting-up-the-repositories">Setting up the repositories</h3>
GI's avatar
GI committed
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
<p>Let&rsquo;s assume you have a git server and created an empty repository on it at <code>git@yourserver.com:foo</code>.
We first add this remote into Dropbox, and put your shared files in it:</p>
<div class="codehilite"><pre><span></span><span class="gp">$</span> <span class="nb">cd</span> ~/Dropbox/shared/foo
<span class="gp">$</span> git remote add origin git@yourserver.com:foo
<span class="gp">$</span> git add paper.tex ... <span class="c1"># (or use git add -Av .)</span>
<span class="gp">$</span> git commit --author <span class="s1">&#39;Coauthor &lt;who@doesnt.use.git&gt;&#39;</span>
<span class="go">[master a484503] Blah blah (commit subject)</span>
<span class="go"> 1 file changed, 10 insertions(++++++)</span>
<span class="gp">$</span> git push -u origin master
<span class="go">Branch master set up to track remote branch master from origin.</span>
<span class="go">Counting objects: 5, done.</span>
<span class="go">Delta compression using up to 4 threads.</span>
<span class="go">Compressing objects: 100% (5/5), done.</span>
<span class="go">Writing objects: 100% (5/5), 6.80 KiB | 0 bytes/s, done.</span>
<span class="go">Total 5 (delta 3), reused 0 (delta 0)</span>
<span class="go">To yourserver.com/foo</span>
<span class="go">   9996b2d..f9d5e30  master -&gt; master</span>
GI's avatar
GI committed
124 125 126
</pre></div>


GI's avatar
GI committed
127 128 129 130 131 132 133 134
<p>Now set up a local copy by cloning this repository into <code>~/foo</code>. Type:</p>
<div class="codehilite"><pre><span></span><span class="gp">$</span> git clone git@yourserver.com:foo ~/foo
<span class="go">Cloning into &#39;foo&#39;...</span>
<span class="go">remote: Counting objects: 545, done.</span>
<span class="go">remote: Compressing objects: 100% (542/542), done.</span>
<span class="go">remote: Total 545 (delta 341), reused 0 (delta 0)</span>
<span class="go">Receiving objects: 100% (545/545), 691.49 KiB | 0 bytes/s, done.</span>
<span class="go">Resolving deltas: 100% (341/341), done.</span>
GI's avatar
GI committed
135 136 137
</pre></div>


GI's avatar
GI committed
138 139 140
<p>or use your favorite GUI client.
You should now have your work in the remote repository <code>git@yourserver.com</code>, one clone in Dropbox (for your coauthors to edit) and one local clone in <code>~/foo</code> for you to edit.
(Of course, if you had local files you were already working on in <code>~/foo</code>, you could have done the <code>git remote add</code> in <code>~/foo</code>, committed, pushed and then pulled in Dropbox instead.)</p>
GI's avatar
GI committed
141 142 143
<h3 id="committing-changes">Committing changes</h3>
<p>When a collaborator make changes in Dropbox, you have to commit and push it
for them, and pull it into your local copy.</p>
GI's avatar
GI committed
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
<div class="codehilite"><pre><span></span><span class="gp">$</span> <span class="nb">cd</span> ~/Dropbox/shared/foo
<span class="gp">$</span> git commit -a --author <span class="s1">&#39;Coauthor &lt;who@doesnt.use.git&gt;&#39;</span>
<span class="go">[master a484503] Blah blah (commit subject)</span>
<span class="go"> 1 file changed, 10 insertions(++++++)</span>
<span class="gp">$</span> git push
<span class="go">Counting objects: 5, done.</span>
<span class="go">Delta compression using up to 4 threads.</span>
<span class="go">Compressing objects: 100% (5/5), done.</span>
<span class="go">Writing objects: 100% (5/5), 6.80 KiB | 0 bytes/s, done.</span>
<span class="go">Total 5 (delta 3), reused 0 (delta 0)</span>
<span class="go">To yourserver.com/foo</span>
<span class="go">   9996b2d..f9d5e30  master -&gt; master    </span>
<span class="gp">$</span> <span class="nb">cd</span> ~/foo
<span class="gp">$</span> git pull
<span class="go">Updating 9996b2d..f9d5e30</span>
<span class="go">Fast-forward</span>
<span class="go"> paper.tex        |  141 +++---</span>
<span class="go"> refs.bib         |    5 +-</span>
<span class="go"> 3 files changed, 140 insertions(+), 6 deletions(-)</span>
GI's avatar
GI committed
163 164 165 166 167 168 169 170 171
</pre></div>


<p>After the first commit as your co-author, you can just use <code>--author Coauthor</code>
without typing the whole email address every time. Also, if you have only one
co-author who will commit in Dropbox, then you can use <code>git config</code> to set
<code>user.name</code> and <code>user.email</code> in the Dropbox repository, and not use <code>--author</code>
above.</p>
<p>When you make changes:</p>
GI's avatar
GI committed
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
<div class="codehilite"><pre><span></span><span class="gp">$</span> <span class="nb">cd</span> ~/foo
<span class="gp">$</span> git commit -a <span class="o">&amp;&amp;</span> git push
<span class="go">[master a484503] Blah blah (commit subject)</span>
<span class="go"> 1 file changed, 10 insertions(++++++)</span>
<span class="go">Counting objects: 5, done.</span>
<span class="go">Delta compression using up to 4 threads.</span>
<span class="go">Compressing objects: 100% (5/5), done.</span>
<span class="go">Writing objects: 100% (5/5), 6.80 KiB | 0 bytes/s, done.</span>
<span class="go">Total 5 (delta 3), reused 0 (delta 0)</span>
<span class="go">To yourserver.com/foo</span>
<span class="go">   9996b2d..f9d5e30  master -&gt; master    </span>
<span class="gp">$</span> <span class="nb">cd</span> ~/Dropbox/shared/foo
<span class="gp">$</span> git pull
<span class="go">Updating 9996b2d..f9d5e30</span>
<span class="go">Fast-forward</span>
<span class="go"> paper.tex        |  141 +++---</span>
<span class="go"> refs.bib         |    5 +-</span>
<span class="go"> 3 files changed, 140 insertions(+), 6 deletions(-)</span>
GI's avatar
GI committed
190 191 192 193
</pre></div>


<h3 id="when-you-and-your-co-author-simultaneously-made-changes">When you and your co-author simultaneously made changes</h3>
GI's avatar
GI committed
194 195 196 197 198 199
<p>No problem. Git handles it painlessly. (I&rsquo;m omitting the console output of git below for brevity.)</p>
<div class="codehilite"><pre><span></span><span class="gp">$</span> <span class="nb">cd</span> ~/Dropbox/shared/foo
<span class="gp">$</span> git commit -a --author Coauthor <span class="o">&amp;&amp;</span> git push
<span class="gp">$</span> <span class="nb">cd</span> ~/foo
<span class="gp">$</span> git commit -a
<span class="gp">$</span> git pull --rebase
GI's avatar
GI committed
200 201 202 203 204 205 206 207 208 209 210 211 212 213 214
</pre></div>


<p>The last command may warn you about conflicts (if you and your co-author
edited similar portions of the same file). Follow the instructions displayed
by git. Once you&rsquo;re done, push your changes and pull them into Dropbox as
shown in the previous section.</p>
<h2 id="creating-branches-for-a-co-author">Creating branches for a co-author</h2>
<p>Often when when I&rsquo;m editing my local copy my collaborator makes changes in
Dropbox simultaneously. For simple changes you can merge them quickly as
above. If there have been more elaborate changes, I usually create a branch
and merge it as follows.</p>
<ol>
<li>
<p>Commit and push your collaborators changes to a new branch</p>
GI's avatar
GI committed
215 216 217 218
<div class="codehilite"><pre><span></span><span class="gp">$</span> <span class="nb">cd</span> ~/Dropbox/shared/foo
<span class="gp">$</span> git checkout -b coauthor-b1
<span class="gp">$</span> git commit --author Coauthor -a
<span class="gp">$</span> git push --all
GI's avatar
GI committed
219 220 221 222 223 224 225
</pre></div>


</li>
<li>
<p>Merge your co-authors changes in your local copy. (Or rebase it, if you
   know what you are doing.)</p>
GI's avatar
GI committed
226 227 228 229 230
<div class="codehilite"><pre><span></span><span class="gp">$</span> <span class="nb">cd</span> ~/foo
<span class="gp">$</span> git commit -a
<span class="gp">$</span> git fetch origin coauthor-b1
<span class="gp">$</span> git merge coauthor-b1
<span class="gp">$</span> git push
GI's avatar
GI committed
231 232 233 234 235 236
</pre></div>


</li>
<li>
<p>Pull them in the shared Dropbox folder.</p>
GI's avatar
GI committed
237 238 239
<div class="codehilite"><pre><span></span><span class="gp">$</span> <span class="nb">cd</span> ~/Dropbox/shared/foo
<span class="gp">$</span> git checkout master
<span class="gp">$</span> git pull
GI's avatar
GI committed
240 241 242 243 244 245 246 247 248 249
</pre></div>


</li>
</ol>
    <br />
    <h3>
      <span class='glyphicon glyphicon-comment' aria-hidden='true'></span>&emsp;Comments
    </h3>

GI's avatar
GI committed
250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312
    <ul class='list-unstyled comments'>
	<li>
	  <div class='media small'>
	    <div class='media-left'>
	      <img class='media-object img-rounded hidden-xs'
		  src='http://cdn.libravatar.org/avatar/b5cd8bd8abea65437a6dd6b0e925d843'
		  alt='Ricardo Lima'>
	    </div>
	    <div class='media-body'>
	      <h4 class='media-heading'>
		.git/ location
		<br />
		<small>Ricardo Lima (2017-12-20 07:56:17 EST)</small>
	      </h4>

	      <p>Hey Gautam,</p>
<p>Nice post. Thank you.</p>
<p>I do not understand this part &ldquo;This creates the git repository in <code>$HOME/foo/.dropbox.git</code> instead of in <code>./.git/</code> as is customary. Now <code>./.git</code> will be a plain text file (not folder) that contains the location of the true git repository.&rdquo;</p>
<p>How does the file <code>$HOME/foo/.dropbox.git</code> is created? With the commands above?
Isn&rsquo;t it created in <code>$HOME/.separate-gitroots/shared.git</code>?
Also when you say &ldquo;Now <code>./.git</code> will be a plain text file (not folder) that contains the location of the true git repository.&rdquo;, do you mean &ldquo;&hellip; of the true .git directory?</p>
<p>Best,</p>
<p>Ricardo</p>
	    </div>
	  </div>
	</li>
      </ul>
      <br />
    <ul class='list-unstyled comments'>
	<li>
	  <div class='media small'>
	    <div class='media-left'>
	      <img class='media-object img-rounded hidden-xs'
		  src='http://cdn.libravatar.org/avatar/0ec534a31b72b69338d0897211ec9925'
		  alt='Gautam Iyer'>
	    </div>
	    <div class='media-body'>
	      <h4 class='media-heading'>
		Re: .git/ location
		<br />
		<small>Gautam Iyer (2017-12-20 12:29:41 EST)</small>
	      </h4>

	      <p>On 2017-12-20 at 07:56:17 EST, Ricardo Lima wrote</p>
<blockquote>
<p>How does the file <code>$HOME/foo/.dropbox.git</code> is created? With the commands above? Isn&rsquo;t it created in <code>$HOME/.separate-gitroots/shared.git</code>?</p>
</blockquote>
<p>Apologies, this was a typo which I just fixed.</p>
<blockquote>
<p>Also when you say &ldquo;Now <code>./.git</code> will be a plain text file (not folder) that contains the location of the true git repository.&rdquo;, do you mean &ldquo;&hellip; of the true .git directory?</p>
</blockquote>
<p>Yes. If you do <code>cat .git</code>, you should see something like</p>
<div class="codehilite"><pre><span></span>gitdir: /home/gautam/.separate-gitroots/foo.git
</pre></div>


<p>I fixed it above as well, thanks for pointing it out.</p>
<p>GI</p>
	    </div>
	  </div>
	</li>
      </ul>
      <br />
GI's avatar
GI committed
313 314 315 316 317 318 319 320 321 322 323 324 325
    <h4>
      <span class='glyphicon glyphicon-pencil' aria-hidden='true'></span>&emsp;Leave a comment
      <small class='text-warning'>
	(Spammers beware: All comments are moderated)
      </small>
    </h4>
    <div id='comment-failed' class='alert alert-danger hidden'>
      Sorry. There was an error submitting your comment. Please try again, or contact me if the problem persists.
    </div>
    <div id='comment-form' class='well row small'>
      <form role='form' method='post'
	  action='javascript:submit_comment()'>
	<input type='hidden' name='page' value='20160406-dropbox-git.md'>
GI's avatar
GI committed
326
	<input type='hidden' name='comment-number' value='3'>
GI's avatar
GI committed
327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361
	<div class="col-md-6 form-group">
	  <label class="sr-only" for="name">Name</label>
	  <input type="text" class="form-control" name="name" placeholder="Name (optional)">
	</div>
	<div class="col-md-6 form-group">
	  <label class="sr-only" for="email">Email address</label>
	  <input type="email" class="form-control" name="email"
	    placeholder="Email (optional, to generate an avatar; will not be published)"
	    title="Your email is only used to generate an avatar. It will not be published or used to contact you. Promise!">
	</div>
	<div class='col-md-12 form-group'>
	  <label class="sr-only" for="subject">Subject</label>
	  <input type="text" class="form-control" name="subject"
	    placeholder="Subject (REQUIRED)" REQUIRED>
	</div>
	<div class="col-md-12 form-group">
	  <label class="sr-only" for="email">Comment</label>
	  <textarea class="form-control" name="comment"
	    placeholder="Comment. (REQUIRED. Write your comment in Markdown)"
	    rows='4' REQUIRED></textarea>
	  
	</div>
	<div class="col-md-12 form-group text-right">
	  <button type="submit" class="btn btn-default">Submit</button>
	</div>
      </form>
    </div>
    <div id='comment-sending' class='alert alert-info hidden'>
      Sending comment; please wait.
    </div>
    <div id='comment-success' class='alert alert-success hidden'>
      Thanks. Your comment was successfully submitted.
      It will appear here shortly if it isn't spam.
    </div>
  </div>
GI's avatar
GI committed
362
</div>
GI's avatar
GI committed
363
    <div class='col-md-3' id='col-right'>
GI's avatar
GI committed
364 365
      <div data-affix-after='#create'>
    <nav class='nav hidden-xs hidden-sm'><div id='toc'>
GI's avatar
GI committed
366 367 368 369 370 371 372 373 374 375 376 377
	      <div class="toc">
<ul>
<li><a href="#make-your-shared-dropbox-folder-have-a-separate-repository">Make your shared Dropbox folder have a separate repository</a></li>
<li><a href="#working-on-a-local-copy">Working on a local copy.</a><ul>
<li><a href="#setting-up-the-repositories">Setting up the repositories</a></li>
<li><a href="#committing-changes">Committing changes</a></li>
<li><a href="#when-you-and-your-co-author-simultaneously-made-changes">When you and your co-author simultaneously made changes</a></li>
</ul>
</li>
<li><a href="#creating-branches-for-a-co-author">Creating branches for a co-author</a></li>
</ul>
</div>
GI's avatar
GI committed
378
</div>
GI's avatar
GI committed
379 380 381 382 383 384
	  </nav>
	

  <br />
  <h4><span class='glyphicon glyphicon-bullhorn' aria-hidden='true'></span>&emsp;Recent posts</h4>
  <ol class='list-unstyled'>
GI's avatar
GI committed
385
    <li class='hide-xoverflow'>
GI's avatar
GI committed
386 387
	<a href='http://localhost:8000/blog/20171208-bibtex-custom-label.html'>Using custom labels with the `alpha` BibTeX style</a>
	(2017-12-08)
GI's avatar
GI committed
388
      </li>
GI's avatar
GI committed
389
    <li class='hide-xoverflow'>
GI's avatar
GI committed
390 391
	<a href='http://localhost:8000/blog/20171207-keyboard-settings.html'>Swapping control/caps lock, and using Apple keyboards on Linux</a>
	(2017-12-07)
GI's avatar
GI committed
392 393
      </li>
    <li class='hide-xoverflow'>
GI's avatar
GI committed
394 395
	<a href='http://localhost:8000/blog/20171114-bibtex-doi.html'>Getting DOI / arXiv links with BibTeX.</a>
	(2017-11-14)
GI's avatar
GI committed
396 397
      </li>
    <li class='hide-xoverflow'>
GI's avatar
GI committed
398
	<a href='http://localhost:8000/blog/20171021-setup.html'>Static Jinja2 Site Generator</a>
GI's avatar
GI committed
399
	(2017-10-21)
GI's avatar
GI committed
400 401
      </li>
    <li class='hide-xoverflow'>
GI's avatar
GI committed
402 403
	<a href='http://localhost:8000/blog/20160406-dropbox-git.html'>Using git and Dropbox</a>
	(2016-04-06)
GI's avatar
GI committed
404
      </li>
GI's avatar
GI committed
405 406
    </ol>
    </div></div>
GI's avatar
GI committed
407 408 409 410 411 412 413 414 415
  </div>
</div>

    <footer>
    <div class='container'>
      <hr>
      <div class='media'>
	<div class='media-body'>
	  <p>
GI's avatar
GI committed
416 417
	    <span class='text-nowrap'>&copy; Gautam Iyer 2015&ndash;2017.</span>
	    This site is licensed under the <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Creative Commons BY-NC-SA 4.0 License</a>.
GI's avatar
GI committed
418 419 420 421 422 423 424 425 426 427 428
	  </p>
	</div>
	<div class='media-right'>
	  <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">
	    <img alt="Creative Commons License" class='media-object' style="border-width:0" src="/share/licence/cc-by-nc-sa-88x31.png">
	  </a>
	</div>
      </div>

      <span class='text-nowrap' title='Email'>
    <span class='glyphicon glyphicon-envelope' aria-hidden='true'></span>
GI's avatar
GI committed
429
    gautam@math.cmu.edu.</span>
GI's avatar
GI committed
430 431 432 433
      &emsp;
      <span class='text-nowrap' title='Office'><span class='glyphicon glyphicon-briefcase' aria-hidden='true'></span> <a title='Wean Hall' href='https://www.google.com/maps/place/Wean+Hall,+Carnegie+Mellon+University,+Pittsburgh,+PA+15213'>WEH</a> 6121.
  </span>
    </div>
GI's avatar
GI committed
434
  </footer><script src="/dev/static/jquery/1.12.4/jquery.js">
GI's avatar
GI committed
435 436
      </script>
      <script src="/dev/static/bootstrap/3.3.7/js/bootstrap.js">
GI's avatar
GI committed
437
      </script><script src='/share/js/local.js'></script></body>
GI's avatar
GI committed
438
</html>