2024年3月21日发(作者:过若雁)
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
说明
本文档只是日常工作中一些使用步骤的简单归纳,旨在帮助大家
快速用上GIT,先能够用起来,知其然后再去究其所以然,如有疏漏,
请大家发邮件xukong@,会及时进行改进,谢谢。
安装步骤简介:
1. 安装支持中文文件名的Git命令行软件包MsysGit。
2. 在MsysGit中生成用来访问Git版本控制库的公钥数据。
3. 安装Git图形界面客户端软件TortoiseGit (此软件调用第1
步中安装的Git命令行软件完成相关操作)
4. TortoiseGit使用简介。
2011-11-25 1/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
1 安装支持中文文件名的GIT软件包MsysGit
下载支持中文文件名的MsysGit软件,可访问网址
/git/ ,下载其中的
/git/,如下图
所示
2011-11-25 2/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
1 配置安装目录
使用默认的路径即可,此路径在下面配置Git图形界面客户端
TortoiseGit时会用到,如下图所示:
2011-11-25 3/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
2
配置
命令行快捷方式
在安装中会出现设置如何与Windows的文件浏览器结合的界面,
设置成“可在目录上点右键直接进入该目录的Git命令行”,如下图
所示:
按上图的配置完成安装后,在任意目录如“D:temp”上点右键,
会出现“Git Bash Here”的菜单,如下图所示:
选择“Git Bash Here”菜单后即可进入相关目录的Git命令行模
2011-11-25 4/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
式,可输入Git命令完成相关操作,如下图所示:
3
设置
如何使用GIT命令行
按默认设置,使用软件自带的BASH风格的命令行即可,如下图
所示:
2011-11-25 5/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
4 配置使用什么SSH客户端
配置使用软件自带的SSH客户端来完成与GIT服务器的SSH安
全交互,确认是可信的用户才能对版本库进行操作,按系统默认设置
即可,如下图所示:
2011-11-25 6/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
5 配置版本控制中文本文件的换行风格
按系统默认设置即可(即从版本库中取出时使用Windows系统
的“回车+换行”风格,存入版本库时使用Unix系统的“换行”风
格),如下图所示:
其他的一路点击“Next”,即可完成软件安装。
2011-11-25 7/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
6 生成SSH安全密钥,提供给GIT版本库管理员以访问Git版本
库
点击桌面上生成的图标,默认进入用户主目录,然后执
行 –t rsa,一路输入回车即可完成操作。
在用户主目录下,例如用户名为xukong,则在目录
c:Usersxukong下会出现.ssh目录,里面会生成2个文件:id_rsa
为私钥文件,id_为公钥文件,如下图所示:
在id_文件内容的最后,即2个=号的后面,如下图所示:
,是此用户的鉴权名称(根据用户在
2011-11-25 8/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
WINDOWS中的用户名和主机名称的不同,每个id_最后的
内容也会不同),将id_复制一份,按=号后的名称重新命名,
例如上图所示的内容,命名成 xukong@,发
送给GIT版本库管理员即可。
2 安装PUTTY软件包
为使用SSH协议与Git版本库进行交互,需安装免费软件PUTTY,
软件主页在
/~sgtatham/putty/downlo
下载完整的安装包
/~sgtatham/putty/latest/x86/putty-0.61-inst
安装时一路点击“Next”即可
2011-11-25 9/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
从id_rsa 私钥文件中生成.ppk文件
因为下面安装的Git图形界面客户端软件TortoiseGit可使用
PUTTY通过SSH协议与Git版本库进行安全验证,所以需要生成相
关公钥的ppk配置文件。操作步骤如下:
执行 puTTYgen 程序,如下图所示:
然后点击“Load”按钮,如下图所示:
2011-11-25 10/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
2011-11-25 11/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
找到用户的.SSH目录(一般是在C盘“用户”目录下的相关用户
名目录下),载入其中“id_rsa”文件(注意界面中默认的是只显示.ppk
文件,需要选择“显示所有文件”
id_rsa文件),如下图所示:
以看到
2011-11-25 12/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
然后提示导入成功,如下图所示:
2011-11-25 13/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
然后点击按钮“Save private key”另存为ppk文件,如下图所
示:
2011-11-25 14/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
文件名建议命名成前面提到的id_文件中,最后2个=号
后出现的信息,本例中是 xukong@XUKONG-X220I,后缀名为ppk
即可。
最后.SSH目录中出现如下文件:
正确完成上述步骤,就生成了puTTY软件在SSH验证中使用的
ppk格式的私钥文件.
2011-11-25 15/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
3 安装Git图形界面客户端TortoiseGit
在/p/tortoisegit/中可下载相关软件:
32位下载地址为
/files/TortoiseGit-1.7.5.0-32
64位下载地址:
/files/TortoiseGit-1.7.5.0-64
1 安装注意事项
一路点击“Next”即可。
2011-11-25 16/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
2 安装后的配置
随意新建一个目录,例如d:tempgit,如下图所示:
在目录”d:tempgit”上点击鼠标右键,选择“TortoiseGit”-
“Setings”进行配置,如下图所示:
2011-11-25 17/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
1 配置使用GIT版本库的用户信息(重要)
选择“Git”下的“Config”,然后在“Name”和“Email”中填
入相关用户信息即可
2011-11-25 18/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
2
配置
MsysGit软件的路径信息
配置的路径
2011-11-25 19/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
4 TortoiseGit使用简介
1 克隆(Clone)签出文件
即对应其他版本控制软件的签出操作,例如SVN的Checkout
操作
本例中Git版本库相关信息如下:
Git版本库服务器地址:“10.196.11.242“
操作Git版本库的用户名:git
测试项目库名称:project1
本地测试目录:d:tempgit
在前面建立的c:tempGit完成相关操作
2011-11-25 20/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
在c:tempgit目录上点击鼠标右键,选择“Git Clone“,
2011-11-25 21/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
在出现的界面中按下图所示设置:
主要是
Url输入:git@10.196.11.242:
选择“Web”
勾上“Load Putty Key”并选中前面生成的
xukong@公钥文件。
点击按钮“Ok“完成签出
2011-11-25 22/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
2 增加、修改、删除文件
签出后的Project1文件夹结构如下图所示:
下面我们将完成如下工作:
1 删除“中文名文件夹”目录中的“中文文件名及内容-”
文件
直接删除文件即可,在进行提交(commit)操作时TortoiseGit会
扫描到相关变动。
2011-11-25 23/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
2 修改“project1”下的“中文文件名及内容.txt”文件。
在文件最后加上一行“测试20111121”
3 在“中文名文件夹”中新建一个文件“中文文件名及内容-”。
新建一个文件“中文文件名及内容-”,在其中输入内容“测
试3”。
因为新增了文件,需要告诉GIT我们已经新增了文件,在目录
“d:tempgitproject1”上点击鼠标右键,在弹出的菜单中选择执
行“Add…”命令,如下图所示:
2011-11-25 24/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
在弹出的窗口中可以看到已经列出了新增加的文件,如下图所示:
2011-11-25 25/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
但是这时文件默认是没有选中,”OK”按钮不可用,因为Git不
能确定新增的文件是否是我们需要的,这时我们就打勾选上并点击
“OK”,确认是我们需要新增的文件,结果如下图所示:
虽然这里已经出现“COMMIT”按钮,但是一般我们新增文件后
都要进行输入,修改等操作,这里就不执行COMMIT操作了。
2011-11-25 26/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
3 将更新提交(commit)到版本库
注意:由于Git的设计特性,Commit只是在本地版本库中记录
了此次提交操作,此时远程版本库,(即前面签出时使用的地址
git@10.196.11.242:)也就是10.196.11.242上的
版本库后是没有任何数据保存进去的,需要执行后面的
“将更新推送(Push)到版本库”才能将本地修改保存到远程版本
库。
在确认已经完成某个阶段性的工作后,就可以将本地的更新同步
到版本库中去了,在目录“d:tempgitproject1”上点击鼠标右键,
执行“Git Commit->“master””,如下图所示:
2011-11-25 27/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
可以看到TortoiseGit已经扫描到我们前面进行的新增删除修改
操作了,在“Message”中输入我们这次提交的说明,注意,一定
要养成输入提交说明的习惯,最好加上日期,提交人等信息。
点击“OK”按钮完成提交操作,
2011-11-25 28/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
注:如果确认此次COMMIT的内容已经需要推送到远程版本库
了,也可在此处点击“Push”按钮完成推送操作。
2011-11-25 29/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
4 将更新推送(push)到版本库
确认完成所有相关工作后,则可以将修改后的文件保存到远程版
本库中了,这个操作称为“Push”(即推送)。在project1目录上点
击鼠标右键,然后执行“Push”菜单,如下图所示:
2011-11-25 30/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
执行“Push”后出现的界面如下图所示:
2011-11-25 31/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
此时可能还没有远程版本库的相关信息,可自行添加,点击
“Manage”按钮,在出现的界面中添加project1的相关信息即可,
如下图所示:
点击“”保存即可。
然后返回Push界面即可看到刚才添加的project1信息,选择后点
击“ok”即可。
2011-11-25 32/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
2011-11-25 33/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
5 与远程版本库保持同步(Pull)
如果其他同事对版本库进行了更新,需要将他们的修改下载到本
地版本库,可执行“pull”进行同步,如下图所示:
2011-11-25 34/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
然后选择前面建立的远程版本库“project1”,分支一般选择
“master”,点击“OK”即可。
也可执行“Git Sync…”
2011-11-25 35/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
由于“Remote Branch”(远地分支)默认为空,一般选择为“master”
2011-11-25 36/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
选中“master”(主分支)后,再点击“pull”按钮,即可完成同步。
2011-11-25 37/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
6 查看版本库日志信息
2011-11-25 38/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
2011-11-25 39/39
2024年3月21日发(作者:过若雁)
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
说明
本文档只是日常工作中一些使用步骤的简单归纳,旨在帮助大家
快速用上GIT,先能够用起来,知其然后再去究其所以然,如有疏漏,
请大家发邮件xukong@,会及时进行改进,谢谢。
安装步骤简介:
1. 安装支持中文文件名的Git命令行软件包MsysGit。
2. 在MsysGit中生成用来访问Git版本控制库的公钥数据。
3. 安装Git图形界面客户端软件TortoiseGit (此软件调用第1
步中安装的Git命令行软件完成相关操作)
4. TortoiseGit使用简介。
2011-11-25 1/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
1 安装支持中文文件名的GIT软件包MsysGit
下载支持中文文件名的MsysGit软件,可访问网址
/git/ ,下载其中的
/git/,如下图
所示
2011-11-25 2/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
1 配置安装目录
使用默认的路径即可,此路径在下面配置Git图形界面客户端
TortoiseGit时会用到,如下图所示:
2011-11-25 3/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
2
配置
命令行快捷方式
在安装中会出现设置如何与Windows的文件浏览器结合的界面,
设置成“可在目录上点右键直接进入该目录的Git命令行”,如下图
所示:
按上图的配置完成安装后,在任意目录如“D:temp”上点右键,
会出现“Git Bash Here”的菜单,如下图所示:
选择“Git Bash Here”菜单后即可进入相关目录的Git命令行模
2011-11-25 4/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
式,可输入Git命令完成相关操作,如下图所示:
3
设置
如何使用GIT命令行
按默认设置,使用软件自带的BASH风格的命令行即可,如下图
所示:
2011-11-25 5/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
4 配置使用什么SSH客户端
配置使用软件自带的SSH客户端来完成与GIT服务器的SSH安
全交互,确认是可信的用户才能对版本库进行操作,按系统默认设置
即可,如下图所示:
2011-11-25 6/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
5 配置版本控制中文本文件的换行风格
按系统默认设置即可(即从版本库中取出时使用Windows系统
的“回车+换行”风格,存入版本库时使用Unix系统的“换行”风
格),如下图所示:
其他的一路点击“Next”,即可完成软件安装。
2011-11-25 7/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
6 生成SSH安全密钥,提供给GIT版本库管理员以访问Git版本
库
点击桌面上生成的图标,默认进入用户主目录,然后执
行 –t rsa,一路输入回车即可完成操作。
在用户主目录下,例如用户名为xukong,则在目录
c:Usersxukong下会出现.ssh目录,里面会生成2个文件:id_rsa
为私钥文件,id_为公钥文件,如下图所示:
在id_文件内容的最后,即2个=号的后面,如下图所示:
,是此用户的鉴权名称(根据用户在
2011-11-25 8/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
WINDOWS中的用户名和主机名称的不同,每个id_最后的
内容也会不同),将id_复制一份,按=号后的名称重新命名,
例如上图所示的内容,命名成 xukong@,发
送给GIT版本库管理员即可。
2 安装PUTTY软件包
为使用SSH协议与Git版本库进行交互,需安装免费软件PUTTY,
软件主页在
/~sgtatham/putty/downlo
下载完整的安装包
/~sgtatham/putty/latest/x86/putty-0.61-inst
安装时一路点击“Next”即可
2011-11-25 9/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
从id_rsa 私钥文件中生成.ppk文件
因为下面安装的Git图形界面客户端软件TortoiseGit可使用
PUTTY通过SSH协议与Git版本库进行安全验证,所以需要生成相
关公钥的ppk配置文件。操作步骤如下:
执行 puTTYgen 程序,如下图所示:
然后点击“Load”按钮,如下图所示:
2011-11-25 10/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
2011-11-25 11/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
找到用户的.SSH目录(一般是在C盘“用户”目录下的相关用户
名目录下),载入其中“id_rsa”文件(注意界面中默认的是只显示.ppk
文件,需要选择“显示所有文件”
id_rsa文件),如下图所示:
以看到
2011-11-25 12/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
然后提示导入成功,如下图所示:
2011-11-25 13/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
然后点击按钮“Save private key”另存为ppk文件,如下图所
示:
2011-11-25 14/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
文件名建议命名成前面提到的id_文件中,最后2个=号
后出现的信息,本例中是 xukong@XUKONG-X220I,后缀名为ppk
即可。
最后.SSH目录中出现如下文件:
正确完成上述步骤,就生成了puTTY软件在SSH验证中使用的
ppk格式的私钥文件.
2011-11-25 15/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
3 安装Git图形界面客户端TortoiseGit
在/p/tortoisegit/中可下载相关软件:
32位下载地址为
/files/TortoiseGit-1.7.5.0-32
64位下载地址:
/files/TortoiseGit-1.7.5.0-64
1 安装注意事项
一路点击“Next”即可。
2011-11-25 16/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
2 安装后的配置
随意新建一个目录,例如d:tempgit,如下图所示:
在目录”d:tempgit”上点击鼠标右键,选择“TortoiseGit”-
“Setings”进行配置,如下图所示:
2011-11-25 17/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
1 配置使用GIT版本库的用户信息(重要)
选择“Git”下的“Config”,然后在“Name”和“Email”中填
入相关用户信息即可
2011-11-25 18/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
2
配置
MsysGit软件的路径信息
配置的路径
2011-11-25 19/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
4 TortoiseGit使用简介
1 克隆(Clone)签出文件
即对应其他版本控制软件的签出操作,例如SVN的Checkout
操作
本例中Git版本库相关信息如下:
Git版本库服务器地址:“10.196.11.242“
操作Git版本库的用户名:git
测试项目库名称:project1
本地测试目录:d:tempgit
在前面建立的c:tempGit完成相关操作
2011-11-25 20/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
在c:tempgit目录上点击鼠标右键,选择“Git Clone“,
2011-11-25 21/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
在出现的界面中按下图所示设置:
主要是
Url输入:git@10.196.11.242:
选择“Web”
勾上“Load Putty Key”并选中前面生成的
xukong@公钥文件。
点击按钮“Ok“完成签出
2011-11-25 22/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
2 增加、修改、删除文件
签出后的Project1文件夹结构如下图所示:
下面我们将完成如下工作:
1 删除“中文名文件夹”目录中的“中文文件名及内容-”
文件
直接删除文件即可,在进行提交(commit)操作时TortoiseGit会
扫描到相关变动。
2011-11-25 23/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
2 修改“project1”下的“中文文件名及内容.txt”文件。
在文件最后加上一行“测试20111121”
3 在“中文名文件夹”中新建一个文件“中文文件名及内容-”。
新建一个文件“中文文件名及内容-”,在其中输入内容“测
试3”。
因为新增了文件,需要告诉GIT我们已经新增了文件,在目录
“d:tempgitproject1”上点击鼠标右键,在弹出的菜单中选择执
行“Add…”命令,如下图所示:
2011-11-25 24/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
在弹出的窗口中可以看到已经列出了新增加的文件,如下图所示:
2011-11-25 25/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
但是这时文件默认是没有选中,”OK”按钮不可用,因为Git不
能确定新增的文件是否是我们需要的,这时我们就打勾选上并点击
“OK”,确认是我们需要新增的文件,结果如下图所示:
虽然这里已经出现“COMMIT”按钮,但是一般我们新增文件后
都要进行输入,修改等操作,这里就不执行COMMIT操作了。
2011-11-25 26/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
3 将更新提交(commit)到版本库
注意:由于Git的设计特性,Commit只是在本地版本库中记录
了此次提交操作,此时远程版本库,(即前面签出时使用的地址
git@10.196.11.242:)也就是10.196.11.242上的
版本库后是没有任何数据保存进去的,需要执行后面的
“将更新推送(Push)到版本库”才能将本地修改保存到远程版本
库。
在确认已经完成某个阶段性的工作后,就可以将本地的更新同步
到版本库中去了,在目录“d:tempgitproject1”上点击鼠标右键,
执行“Git Commit->“master””,如下图所示:
2011-11-25 27/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
可以看到TortoiseGit已经扫描到我们前面进行的新增删除修改
操作了,在“Message”中输入我们这次提交的说明,注意,一定
要养成输入提交说明的习惯,最好加上日期,提交人等信息。
点击“OK”按钮完成提交操作,
2011-11-25 28/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
注:如果确认此次COMMIT的内容已经需要推送到远程版本库
了,也可在此处点击“Push”按钮完成推送操作。
2011-11-25 29/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
4 将更新推送(push)到版本库
确认完成所有相关工作后,则可以将修改后的文件保存到远程版
本库中了,这个操作称为“Push”(即推送)。在project1目录上点
击鼠标右键,然后执行“Push”菜单,如下图所示:
2011-11-25 30/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
执行“Push”后出现的界面如下图所示:
2011-11-25 31/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
此时可能还没有远程版本库的相关信息,可自行添加,点击
“Manage”按钮,在出现的界面中添加project1的相关信息即可,
如下图所示:
点击“”保存即可。
然后返回Push界面即可看到刚才添加的project1信息,选择后点
击“ok”即可。
2011-11-25 32/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
2011-11-25 33/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
5 与远程版本库保持同步(Pull)
如果其他同事对版本库进行了更新,需要将他们的修改下载到本
地版本库,可执行“pull”进行同步,如下图所示:
2011-11-25 34/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
然后选择前面建立的远程版本库“project1”,分支一般选择
“master”,点击“OK”即可。
也可执行“Git Sync…”
2011-11-25 35/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
由于“Remote Branch”(远地分支)默认为空,一般选择为“master”
2011-11-25 36/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
选中“master”(主分支)后,再点击“pull”按钮,即可完成同步。
2011-11-25 37/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
6 查看版本库日志信息
2011-11-25 38/39
03-Git客户端和TortoiseGit软件的安装与使用说明 杨健
2011-11-25 39/39